;; ;;;;;;; listener ;; (defclass listener (subserver) ( (port :accessor port :initform nil :initarg :port) (default-interpreter :accessor default-interpreter :initarg :interpreter) (socket-object :accessor socket-object :initform nil) ) ) (defmethod initialize-instance :after ((self listener) &rest foo) ;; start listening (setf (slot-value self 'socket-object) (ignore-errors (socket-server (port self)))) ) (defmethod event ((self listener)) ;; here we check if theres a new socket waiting to occur, and return a new session object (if (port self) ;; we actually have a port (cons self (if (socket-wait (socket-object self) 0) ;; create a new session for a connection. (let ((mysession (make-instance 'session :socket-object (socket-accept (socket-object self) :buffered nil)))) (session-interp-connect mysession (make-instance (default-interpreter self))) (list myssesion) ) '() ;; else nil. ) ) ;; we don't have a port, why do we exist? '() ;; return nil ) )