aboutsummaryrefslogtreecommitdiff
path: root/server/server.lisp
blob: 618f91e80d197b4e88ab96f9bb778ddb43609b7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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))
;;; TODO: debug this function
(defun send-cmd (host port game-id command arg)
  (let ((socket (usocket:socket-connect host port :protocol :datagram))
        (request (list :type "admin" :cmd command :game-id game-id :arg arg))
        (buffer (make-array 500 :element-type '(unsigned-byte 8) :initial-element 0)))
    (usocket:socket-send socket (string-downcase (to-json request)) 300)
    (format t (babel:octets-to-string (usocket:socket-receive socket buffer 300)))
    (force-output t)
    (usocket:socket-close 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 (host port)
  (usocket:socket-server host port #'handle-client nil :in-new-thread nil :protocol :datagram))