aboutsummaryrefslogtreecommitdiff
path: root/server/server.lisp
diff options
context:
space:
mode:
authorLoic Guegan <manzerberdes@gmx.com>2019-05-10 13:29:26 +0200
committerLoic Guegan <manzerberdes@gmx.com>2019-05-10 13:29:26 +0200
commit38d97022660ef50b77f186ba2e555f30f4c09c64 (patch)
tree4e524a9073f4ff165816efa3245ba899a429abe6 /server/server.lisp
parent284ad037a5fd014fbcd08e1b8fc8d039e623f49d (diff)
Finish server git add -A!
Diffstat (limited to 'server/server.lisp')
-rw-r--r--server/server.lisp30
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))))
+