X-Git-Url: http://git.pond.sub.org/?p=eow;a=blobdiff_plain;f=empire.lisp;h=6d756a97fc93ddab8ba9a3ed7aa3d52754017c99;hp=7ef68bfc3506f1e4f9fe3a487b0e376b79d6df95;hb=1bd48ef37e2267d788ab2721044d9d12129e9087;hpb=b41964772b160ca46e120970ed8878dcc8f9b05d diff --git a/empire.lisp b/empire.lisp index 7ef68bf..6d756a9 100644 --- a/empire.lisp +++ b/empire.lisp @@ -46,7 +46,11 @@ this stream.") (mode :accessor connection-mode :initform nil - :documentation "TODO(gefla)"))) + :documentation "TODO(gefla)") + (session + :accessor session + :initarg :session + :documentation "web session to which this connection belongs"))) (defun make-connection (&key (user nil) (password nil) @@ -54,7 +58,8 @@ this stream.") (server-port *default-empire-server-port*) (socket nil) (network-stream nil) - (logging-stream nil)) + (logging-stream nil) + session) (make-instance 'connection :user user :password password @@ -62,14 +67,16 @@ this stream.") :server-port server-port :socket socket :stream network-stream - :logging-stream logging-stream)) + :logging-stream logging-stream + :session session)) ;;; interface (defun connect (&key (user nil) (password nil) (server-name *default-empire-server*) (server-port *default-empire-server-port*) - (logging-stream *standard-output*)) + (logging-stream *standard-output*) + session) "Connect to server and return a connection object." (let* ((socket (usocket:socket-connect server-name server-port)) (stream (usocket:socket-stream socket)) @@ -79,7 +86,8 @@ this stream.") :network-stream stream :logging-stream logging-stream :server-name server-name - :server-port server-port)) + :server-port server-port + :session session)) (handler (spawn-with-name (format nil "empire-handler-~a" user) #'handle-connection connection))) (setf (connection-handler connection) handler) @@ -137,6 +145,10 @@ this stream.") (setf play-sent-p t)) (set-new-mode m 'play-mode)))) +(defmethod handle-exit ((m init-mode) message) + (declare (ignorable message)) + (quit (connection m))) + (defmethod handle-exit ((m play-mode) message) (declare (ignorable message)) (quit (connection m))) @@ -145,7 +157,7 @@ this stream.") (let* ((c (connection m)) (log (logging-stream c))) (format log "handle-data ~a~%" message) - (empire-web:data message))) + (empire-web:data (session c) message))) (defmethod handle-prompt ((m play-mode) message) (let* ((c (connection m)) @@ -154,7 +166,7 @@ this stream.") (let* ((minutes (read s)) ;;FIXME DANGEROUS (btus (read s))) (format log "[~a:~a]: ~%" minutes btus) - (empire-web:prompt minutes btus))))) + (empire-web:prompt (session c) minutes btus))))) (defparameter *line-type-dispatch* (list `(,+C_DATA+ . handle-data)