/* core/netserver.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_NETSERVER_H__ #define __INCLUDED_CORE_NETSERVER_H__ #ifndef _WIN32 #include #else #include #endif #include #include #include "core/net.h" #include "core/netclient.h" #include "core/player.h" namespace core { /// Network server class NetServer { public: NetServer(std::string const host, unsigned int const port); ~NetServer(); /*----- inspectors ------------------------------------------------ */ /// Returns true if the TCP server has a valid file descriptor inline bool valid() const { return netserver_fd != -1; } /// Returns true if the TCP server has an invalid file descriptor inline bool invalid() const { return netserver_fd == -1; } /// Returns the error state of the TCP server inline bool error() const { return netserver_error; } /// Return the socket file descriptor inline int fd() const { return netserver_fd; } /*----- mutators -------------------------------------------------- */ /// receive data from clients void receive(); /// transmit data to clients void transmit(); /// broadcast network data to all clients void broadcast(std::string const & message, Player *ignore_player=0); /// send network data to one client void send(NetClient * client, std::string const & message); /// find the client corresponding to a player NetClient *find_client(Player const *player); std::list clients; protected: /// called when a new client connects NetClient *client_connect(std::string const host, int const port); /// called when a client has send the intial handshake void client_initialize(NetClient *client); /// remove terminated clients void reap(); /// parse incoming client messages void parse_incoming_message(NetClient *client, const std::string & message); private: bool netserver_error; int netserver_fd; struct sockaddr_in netserver_addr; fd_set serverset; int fdmax; char recbuf[FRAMESIZE]; }; } #endif // __INCLUDED_CORE_NETSERVER_H__