/* core/netclient.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_NETCLIENT_H__ #define __INCLUDED_CORE_NETCLIENT_H__ namespace core { class NetClient; } #include "core/net.h" namespace core { /// queues incoming client messages class NetClient { public: NetClient(std::string host, int port, int fd); ~NetClient(); /// the remote hostname the client is connected to std::string host() const; /// the remote port the client is connected to int port() const; /// the player info associated with this client Player *player(); /// bufer incoming data void receive(char *data); /// add a raw network message to the send queue void send_raw(std::string const &msg); /// return true if there is buffered incoming data bool has_messages() const; /// retreive buffered incoming data void retreive(std::string & message); /// transmit messages in the send queue to the remote client void transmit(); inline bool error() const { return client_error; } void abort(); enum State {Connecting = 0, Pending = 1, Connected = 2}; inline State state() const { return client_state; } State client_state; float client_timeout; float client_keepalive; private: inline int fd() const { return client_fd; } struct sockaddr_in client_addr; std::string client_host; int client_port; int client_fd; bool client_error; Player *client_player; std::string messageblock; std::deque recvq; std::string sendq; }; } #endif // __INCLUDED_CORE_NETCLIENT_H__