(function
(lambda ()
(funcall chess-engine-response-handler 'undo
- (string-to-int (match-string 1))))))
+ (string-to-number (match-string 1))))))
(cons "accept\\(\\s-+\\(.+\\)\\)?$"
(function
(lambda ()
(function
(lambda ()
(funcall chess-engine-response-handler 'call-flag))))
+ (cons "forfeit$"
+ (function
+ (lambda ()
+ (funcall chess-engine-response-handler 'flag-fell))))
(cons "kibitz\\s-+\\(.+\\)$"
(function
(lambda ()
(chess-message-catalog 'english
'((network-starting . "Starting network client/server...")
(network-waiting . "Now waiting for your opponent to connect...")
- (network-connected ."You have connected; pass now or make your move.")))
+ (takeback-sent . "Sent request to undo %d ply(s) to your opponent")))
(defun chess-network-flatten-multiline (str)
(while (string-match "\n" str)
(setq str (replace-match "\n" t t str)))
str)
+(defvar chess-network-kind)
+(make-variable-buffer-local 'chess-network-kind)
+
(defun chess-network-handler (game event &rest args)
"Initialize the network chess engine."
(unless chess-engine-handling-event
(if (fboundp 'open-network-stream-server)
(open-network-stream-server "*chess-network*"
(current-buffer)
- (read-string "Port: "))
+ (string-to-number
+ (read-string "Port: ")))
(start-process "*chess-network*"
(current-buffer) "/usr/bin/nc"
"-l" "-p" (read-string "Port: ")))
(open-network-stream "*chess-network*" (current-buffer)
(read-string "Host: ")
(read-string "Port: "))))
- (if (eq which ?s)
- (chess-message 'network-waiting)
- (chess-network-handler 'match)
- (chess-message 'network-connected))
+ (setq chess-engine-process proc
+ chess-network-kind (if (eq which ?s) 'server 'client))
t))
- ((eq event 'ready)) ; don't set active yet
+ ((eq event 'ready) ; don't set active yet
+ (chess-game-run-hooks game 'announce-autosave)
+ (if (eq chess-network-kind 'server)
+ (chess-message 'network-waiting)
+ (chess-network-handler game 'match)))
((eq event 'setup-pos)
(chess-engine-send nil (format "fen %s\n"
(chess-engine-command nil 'retract))
(setq chess-engine-pending-offer 'undo
chess-engine-pending-arg (car args))
- (chess-engine-send nil (format "takeback %d\n" (car args))))
+
+ (chess-engine-send nil (format "takeback %d\n" (car args)))
+ (chess-message 'takeback-sent (car args)))
((eq event 'accept)
- (chess-engine-send nil "accept\n"))
+ (chess-engine-send nil (if (car args)
+ (format "accept %s\n" (car args))
+ "accept\n")))
((eq event 'decline)
(chess-engine-send nil "decline\n"))
((eq event 'set-index)
(chess-engine-send nil (format "index %d\n" (car args))))
+ ((eq event 'flag-fell)
+ (chess-engine-send nil "forfeit\n")
+ (chess-common-handler game 'flag-fell))
+
(t
(apply 'chess-common-handler game event args)))))