aboutsummaryrefslogtreecommitdiff
path: root/server/server.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.lisp')
-rw-r--r--server/server.lisp26
1 files changed, 8 insertions, 18 deletions
diff --git a/server/server.lisp b/server/server.lisp
index f1417c5..3676121 100644
--- a/server/server.lisp
+++ b/server/server.lisp
@@ -7,23 +7,13 @@
:element-type '(unsigned-byte 8)
:initial-element 0))
-(defun handle-client (client-socket)
- (unwind-protect ; To be sure to close the client socket
- (let* ((request (read-line (usocket:socket-stream client-socket))))
- (loop while (eq (search "#EOF" request) nil) do
- (setf request (concatenate 'string request (read-line (usocket:socket-stream client-socket) nil nil))))
- (setf request (cl-strings:replace-all request "#EOF" ""))
- (format (usocket:socket-stream client-socket) (handle-request *server-api* request))
- (force-output (usocket:socket-stream client-socket)))
- (usocket:socket-close client-socket)))
-
+(defun handle-client (buffer) ; echo
+ (declare (type (simple-array (unsigned-byte 8) *) buffer)) ; Seems to be to tell lisp which type is buffer
+ (let ((request (babel:octets-to-string buffer)))
+ (format t "Receive client request: ~a" request)
+ (babel:string-to-octets
+ (handle-request *server-api* request))))
;;; The server :D
-(defun start (interface port)
- (format t "Server started!~%")
- (let ((socket (usocket:socket-listen interface port)))
- (unwind-protect ; To be sure to close server socket
- (loop
- (handle-client (usocket:socket-accept socket :element-type 'character)))
- (usocket:socket-close socket))))
-
+(defun start (host port)
+ (usocket:socket-server host port #'handle-client nil :in-new-thread nil :protocol :datagram))