From 38d97022660ef50b77f186ba2e555f30f4c09c64 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Fri, 10 May 2019 13:29:26 +0200 Subject: Finish server git add -A! --- server/server.lisp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 server/server.lisp (limited to 'server/server.lisp') 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)))) + -- cgit v1.2.3