(load 'subserver-objects.lisp) (defvar *add-to-subserver-list* ()) ;; this is a special variable to allow processes outside of the server loop to insert new objects into the subserver list (defvar *default-interpreter* 'interp-echoer) ;; this is a special variable indicating the default interpreter to put into the sessions (defun do-subservers (oldsub) (cond ((null oldsub) ()) (t (append (do-subservers (cdr oldsub)) (event (car oldsub)))) ) ) ;; ;;; main part ;; (defun server-start (&key startup-object) (let ((*stop-server* NIL) (*subserver-list* ())) (if startup-object (setq *subserver-list* (append *subserver-list* (event startup-object))) ) (loop (if *stop-server* (break)) (setq *subserver-list* (do-subservers *subserver-list*)) ) ) ) (defun server-shutdown () ;; nothing ) (server-start :startup-object (make-instance 'listener :port 7777 :interpreter *default-interpreter*)) (server-shutdown)