(setf socket sock
stream s
connection-handler handler)))
- (empire-log:info "empire:reconnect: ~a" c))
+ (empire-log:info "~a: reconnect" c))
(defparameter +C_CMDOK+ "0")
(defparameter +C_DATA+ "1")
(defmethod set-new-mode ((m base-mode) new-mode)
(let* ((c (connection m))
(mode (make-mode c new-mode)))
+ (empire-log:info "~a: set-new-mode ~a -> ~a" c (connection-mode c) new-mode)
(setf (connection-mode c) mode)))
(defgeneric handle-data (base-mode message))
(handler-case
(let* ((s (network-stream c))
(line (read-line s)))
- (empire-log:info "< ~a~%" line)
+ (empire-log:info "~a: < ~a" c line)
(multiple-value-bind (message type) (parse-server-line line)
(let ((handler (lookup-handler type))
(mode (connection-mode c)))
(force-output s))
(defmethod send-message ((c connection) message)
- (let ((s (network-stream c)))
- (empire-log:info "> ~a~%" message)
- (let ((sent-p nil)
- (tries 3))
- (loop
- while (and (not sent-p)
- (> tries 0))
- do (handler-case
- (progn
- (raw-send-message s message)
- (setf sent-p t))
- (sb-int:closed-stream-error ()
- (progn
- (decf tries)
- (empire-log:info "Connection close - retrying (~a tries left)" tries)
- (reconnect c))))))
- message))
+ (empire-log:info "~a: > ~a" c message)
+ (let ((sent-p nil)
+ (tries 3))
+ (loop
+ while (and (not sent-p)
+ (> tries 0))
+ do (handler-case
+ (let ((s (network-stream c)))
+ (raw-send-message s message)
+ (setf sent-p t))
+ (sb-int:closed-stream-error ()
+ (progn
+ (decf tries)
+ (empire-log:info "~a: Connection close - retrying (~a tries left)" c tries)
+ (reconnect c))))))
+ message)
+
+(defparameter +special-command-char+ #\;)
+
+(defun special-command-p (line)
+ (char= +special-command-char+ (aref line 0)))
+
+(defmethod special-xup ((c connection))
+ t)
+
+(defmethod special-command ((c connection) line)
+ (cond ((string= line "xup") (special-xup c))
+ (t (empire-web:data (session c) "Unknown special command")))
+ line)
+
+(defmethod command ((c connection) line)
+ (cond ((special-command-p line) (special-command c (subseq line 1)))
+ (t (send-message c line))))
(defgeneric play (connection))
(defmethod play ((c connection))