+(defmethod handle-flush ((m play-mode) message)
+ (let* ((c (connection m)))
+ (empire-web:prompt (session c) message)
+ (send-next-line c)))
+
+(defmethod send-next-line ((c connection))
+ (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)))
+ (with-input-from-string (s message)
+ (let* ((minutes (read s)) ;;FIXME DANGEROUS
+ (btus (read s)))
+ (empire-web:prompt (session c)
+ (format nil "[~a,~a]: " minutes btus))))
+ (send-next-line c)))
+
+(defmethod handle-ignore ((m init-mode) message)
+ (declare (ignorable message))
+ t)
+
+(defparameter *line-type-dispatch*
+ (list `(,+C_DATA+ . handle-data)
+ `(,+C_INIT+ . handle-init)
+ `(,+C_EXIT+ . handle-exit)
+ `(,+C_FLUSH+ . handle-flush)
+ `(,+C_BADCMD+ . handle-simple-message)
+ `(,+C_FLASH+ . handle-simple-message)
+ `(,+C_CMDOK+ . handle-ignore)
+ `(,+C_PROMPT+ . handle-prompt)))