fixed server
This commit is contained in:
parent
29a333323a
commit
d648f49c68
|
@ -1,29 +1,45 @@
|
||||||
(load "~/quicklisp/setup.lisp")
|
(load "~/quicklisp/setup.lisp")
|
||||||
(ql:quickload '(:clack :websocket-driver :cl-bcrypt :datafly :sxql :alexandria :com.inuoe.jzon))
|
(ql:quickload '(:clack :websocket-driver :cl-bcrypt :datafly
|
||||||
|
:sxql :alexandria :com.inuoe.jzon))
|
||||||
|
|
||||||
(defpackage :mmo-server
|
(defpackage :mmo-server
|
||||||
(:use :common-lisp :clack :websocket-driver :cl-bcrypt :datafly :sxql :alexandria :com.inuoe.jzon))
|
(:use :common-lisp :clack :websocket-driver :cl-bcrypt :datafly
|
||||||
|
:sxql :alexandria :com.inuoe.jzon))
|
||||||
|
|
||||||
(in-package :mmo-server)
|
(in-package :mmo-server)
|
||||||
|
|
||||||
|
|
||||||
(defvar *connections* (make-hash-table))
|
(defvar *connections* (make-hash-table))
|
||||||
|
|
||||||
(defun handle-new-connection (con)
|
(defun handle-new-connection (con)
|
||||||
(setq *user* (format nil "{\"cmd\":\"login\", \"uid\":\"~a\"}" (random 100000)))
|
(let ((user (make-hash-table)))
|
||||||
(setf (gethash con *connections*)
|
(setf (gethash "uid" user) (random 100000))
|
||||||
*user*)
|
(setf (gethash "cmd" user) "login")
|
||||||
(websocket-driver:send con *user*))
|
(websocket-driver:send con (com.inuoe.jzon:stringify user))
|
||||||
|
(remhash "cmd" user)
|
||||||
|
(setf (gethash con *connections*) user)))
|
||||||
|
|
||||||
(defun broadcast-to-room (connection json)
|
(defun broadcast-to-room (connection message)
|
||||||
(setq message (com.inuoe.jzon:parse json))
|
(let* ((json (com.inuoe.jzon:parse message))
|
||||||
|
(user (gethash connection *connections*))
|
||||||
|
(cmd (gethash "cmd" json)))
|
||||||
|
(cond
|
||||||
|
((equalp cmd "user-login")
|
||||||
|
(let ((copy (alexandria:copy-hash-table *connections*)))
|
||||||
|
(remhash connection copy)
|
||||||
|
(websocket-driver:send connection (com.inuoe.jzon:stringify copy))))
|
||||||
|
((equalp cmd "move")
|
||||||
|
(setf (gethash "x" user) (gethash "x" json))
|
||||||
|
(setf (gethash "y" user) (gethash "y" json))
|
||||||
|
(setf (gethash connection *connections*) user))
|
||||||
|
(t
|
||||||
|
(format t "Unknown message: ~A~%" message)))
|
||||||
|
|
||||||
(loop :for con :being :the :hash-key :of *connections* :do
|
(loop :for con :being :the :hash-key :of *connections* :do
|
||||||
(websocket-driver:send con json)))
|
(websocket-driver:send con message))))
|
||||||
|
|
||||||
(defun handle-close-connection (connection)
|
(defun handle-close-connection (connection)
|
||||||
(let ((message (format nil "{\"cmd\":\"logout\", \"user\":\"~a\"}"
|
(let ((message (format nil "{\"cmd\":\"logout\", \"uid\":\"~a\"}"
|
||||||
(gethash connection *connections*))))
|
(gethash "uid" (gethash connection *connections*)))))
|
||||||
(remhash connection *connections*)
|
(remhash connection *connections*)
|
||||||
(loop :for con :being :the :hash-key :of *connections* :do
|
(loop :for con :being :the :hash-key :of *connections* :do
|
||||||
(websocket-driver:send con message))))
|
(websocket-driver:send con message))))
|
||||||
|
|
Loading…
Reference in New Issue