+ (force-output s))
+
+(defgeneric send-message-one (connection string))
+(defmethod send-message-one ((c connection) message)
+ (empire-log:info "~a: > ~a" c message)
+ (let ((s (network-stream c)))
+ (raw-send-message s message)))
+
+(defmethod send-message ((c connection) message &key next-mode)
+ (if (not (connected-p c))
+ (reconnect c))
+ (if next-mode
+ (locked-queue:enqueue (send-queue c) (cons message next-mode))
+ (locked-queue:enqueue (send-queue c) message)))
+
+(defparameter +special-command-char+ #\;)
+
+(defun special-command-p (line)
+ (and (> (length line) 0)
+ (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))))