Newer
Older
naledi / src / client.lisp
;;;;
;;;; 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."))))