Start API
This commit is contained in:
parent
897fbd8878
commit
f0ccb136eb
4 changed files with 62 additions and 1 deletions
9
server/api/api.lisp
Normal file
9
server/api/api.lisp
Normal file
|
@ -0,0 +1,9 @@
|
|||
(in-package :remote-snake-server-api)
|
||||
|
||||
|
||||
|
||||
(defclass api ()
|
||||
((gm
|
||||
:initform (make-instance 'game-manager))))
|
||||
|
||||
|
41
server/api/game-manager.lisp
Normal file
41
server/api/game-manager.lisp
Normal file
|
@ -0,0 +1,41 @@
|
|||
(in-package :remote-snake-server-api)
|
||||
|
||||
(defclass game-manager ()
|
||||
((games
|
||||
:initform '())
|
||||
(next-id
|
||||
:initform 0)))
|
||||
|
||||
(defgeneric create-game (gm)
|
||||
(:documentation "Create a game in the Game Manager."))
|
||||
|
||||
(defmethod print-object :around ((gm game-manager) stream)
|
||||
(with-slots (games) gm
|
||||
(format stream "Games: ~a" games)))
|
||||
|
||||
(defgeneric delete-game (gm game-id)
|
||||
(:documentation "Delete a game from Game Manager."))
|
||||
|
||||
(defgeneric get-game (gm game-id)
|
||||
(:documentation "Fetch a game from Game Manager."))
|
||||
|
||||
(defmethod delete-game ((gm game-manager) game-id)
|
||||
(get-game gm game-id) ; First try to get the game (if not found, an error will be raised)
|
||||
(with-slots (games) gm
|
||||
(setf games (remove-if #'(lambda (entry) (eql game-id (getf entry :id))) games))))
|
||||
|
||||
(defmethod get-game ((gm game-manager) game-id)
|
||||
(with-slots (games) gm
|
||||
(let ((game (remove-if-not #'(lambda (entry) (eql game-id (getf entry :id))) games)))
|
||||
(when (< (length game) 1) (error "Game ~a not found !" game-id))
|
||||
(getf (first game) :game))))
|
||||
|
||||
;;; Create a new game in gm and return its id
|
||||
(defmethod create-game ((gm game-manager))
|
||||
(let ((new-game-id nil))
|
||||
(with-slots (games next-id) gm
|
||||
(push (list :id next-id :game (make-instance 'game)) games)
|
||||
(setf new-game-id next-id)
|
||||
(incf next-id))
|
||||
new-game-id))
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue