diff options
Diffstat (limited to 'server/server.lisp')
| -rw-r--r-- | server/server.lisp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/server/server.lisp b/server/server.lisp new file mode 100644 index 0000000..b16bd2d --- /dev/null +++ b/server/server.lisp @@ -0,0 +1,30 @@ +(in-package :remote-snake-server) + +(defparameter *server-api* (make-instance 'api)) + +;;; Not that max buffer size is important (since snake in on a single line, snake coordinate can be cutted !) +(defparameter *server-buffer* (make-array 10000 + :element-type '(unsigned-byte 8) + :initial-element 0)) + +(defun handle-client (client-socket) + (unwind-protect ; To be sure to close the client socket + (let ((data (read-line (usocket:socket-stream client-socket))) + (request "")) + (loop while (not (equalp data "#EOF")) do + (setf request (concatenate 'string request data)) + (setf data (read-line (usocket:socket-stream client-socket) nil nil))) + (format (usocket:socket-stream client-socket) (handle-request *server-api* request)) + (force-output (usocket:socket-stream client-socket))) + (usocket:socket-close client-socket))) + + +;;; The server :D +(defun start (port) + (format t "Server start !~%") + (let ((socket (usocket:socket-listen "127.0.0.1" port))) + (unwind-protect ; To be sure to close server socket + (loop + (handle-client (usocket:socket-accept socket :element-type 'character))) + (usocket:socket-close socket)))) + |
