From: Gerd Flaig Date: Sun, 26 Apr 2009 09:14:52 +0000 (+0200) Subject: Allow atomic mode switching in the sender X-Git-Url: http://git.pond.sub.org/?p=eow;a=commitdiff_plain;h=da68168514dece00971f1e317b3cb63ebc2daa73 Allow atomic mode switching in the sender --- diff --git a/empire.lisp b/empire.lisp index 7f6eb31..001f755 100644 --- a/empire.lisp +++ b/empire.lisp @@ -91,7 +91,7 @@ (defgeneric quit (connection)) (defgeneric handle-connection (connection)) (defgeneric read-message (connection)) -(defgeneric send-message (connection message)) +(defgeneric send-message (connection message &key next-mode)) (defgeneric connected-p (connection)) (defgeneric reconnect (conncetion)) @@ -180,7 +180,13 @@ (send-next-line c))) (defmethod send-next-line ((c connection)) - (send-message-one c (locked-queue:dequeue (send-queue c)))) + (let ((next-event (locked-queue:dequeue (send-queue c)))) + (typecase next-event + (string (send-message-one c next-event)) + (cons (let ((message (car next-event)) + (mode (cdr next-event))) + (send-message-one c message) + (set-new-mode c mode)))))) (defmethod handle-prompt ((m play-mode) message) (let* ((c (connection m))) @@ -256,10 +262,12 @@ (let ((s (network-stream c))) (raw-send-message s message))) -(defmethod send-message ((c connection) message) +(defmethod send-message ((c connection) message &key next-mode) (if (not (connected-p c)) (reconnect c)) - (locked-queue:enqueue (send-queue c) message)) + (if next-mode + (locked-queue:enqueue (send-queue c) (cons message next-mode)) + (locked-queue:enqueue (send-queue c) message))) (defparameter +special-command-char+ #\;)