From 2314c27dd650dc02c0b5bdd3bef75818393a9ab5 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Fri, 21 Mar 2008 19:25:11 +0000 Subject: switched to UDP networking --- src/core/netserver.h | 48 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'src/core/netserver.h') 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 #include -#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 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]; }; } -- cgit v1.2.3