diff options
author | Stijn Buys <ingar@osirion.org> | 2008-03-21 19:25:11 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-03-21 19:25:11 +0000 |
commit | 2314c27dd650dc02c0b5bdd3bef75818393a9ab5 (patch) | |
tree | 231815c866a1330338d976480284250e99207554 /src/core/netserver.h | |
parent | 7e99fac4552b402034e5fc3e833cbe8c274f95ce (diff) |
switched to UDP networking
Diffstat (limited to 'src/core/netserver.h')
-rw-r--r-- | src/core/netserver.h | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/src/core/netserver.h b/src/core/netserver.h index 4de87be..df098df 100644 --- a/src/core/netserver.h +++ b/src/core/netserver.h @@ -12,35 +12,56 @@ #include <list> #include <string> -#include "net/tcpserver.h" +#include "core/net.h" #include "core/netclient.h" +#include "core/player.h" namespace core { /// Network server -class NetServer : public net::TCPServer +class NetServer { public: NetServer(std::string const host, unsigned int const port); - virtual ~NetServer(); + ~NetServer(); - /// run one server frame - void frame(float seconds); +/*----- inspectors ------------------------------------------------ */ - /// broadcast a message to all clients - void broadcast(std::string const & message, int ignorefd=-1); + /// 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(); - /// send a message to a client + /// 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<NetClient *> clients; + protected: - /// called by accept() when a new client connects - virtual void client_connect(int const clientfd, std::string const host, int const port); + /// called when a new client connects + NetClient *client_connect(std::string const host, int const port); /// remove terminated clients void reap(); @@ -48,8 +69,15 @@ protected: /// 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]; }; } |