X-Git-Url: http://git.pond.sub.org/?p=eow;a=blobdiff_plain;f=empire.lisp;h=c32696c3504258bd0f4bf78d61806f3b419c11c0;hp=eb75bfcf77d9ee1b3838a2d08bea733ba97b2927;hb=fc5e0903e87b50a4931b66a039f75feb95b78602;hpb=258dcd42f864242f861ccc6bab86ad31cd1722e3 diff --git a/empire.lisp b/empire.lisp index eb75bfc..c32696c 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)) @@ -176,10 +176,17 @@ (defmethod handle-flush ((m play-mode) message) (let* ((c (connection m))) - (empire-web:prompt (session c) message))) + (empire-web:prompt (session c) message) + (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)))) + (etypecase 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))) @@ -255,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+ #\;)