;;;; ;;;; Naledi ya Africa ("Star of Africa") is an ncurses-based survival game ;;;; set in Africa. ;;;; ;;;; This file is responsible for connecting to the server and provides the ;;;; API functions for doing so. ;;;; ;;;; (c) 2018 Daniel Vedder, MIT license ;;;; (in-package :naledi-ya-africa) (let ((naledi-server NIL)) (defun connect-server (&optional (ip "127.0.0.1") (port *port*)) "Connect to the specified server" ;;FIXME I need to catch some exceptions here... (setf naledi-server (usocket:socket-connect ip port)) (if naledi-server (notify "Connected to server ~A:~A" ip port) (notify "Connection to server ~A:~A failed." ip port))) (defun current-server () naledi-server) ;TODO remove after development (defun query-server (request) "Send a request string to the server and return the answer" (unless naledi-server ;XXX do this with exceptions (return-from query-server "You are not connected to a server!")) (let ((servstr (usocket:socket-stream naledi-server))) (logging "CLIENT: sending request ~S" request) (format servstr "~A~%" request) (finish-output servstr) ;;FIXME server still doesn't receive string until disconnect... (logging "CLIENT: waiting for server response") (usocket:wait-for-input naledi-server) (read-from-string (read-line servstr)))) (defun disconnect () "Disconnect from the server" (when naledi-server (usocket:socket-close naledi-server) (setf naledi-server NIL) (notify "Disconnected from server."))))