Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-03-21 19:25:11 +0000
committerStijn Buys <ingar@osirion.org>2008-03-21 19:25:11 +0000
commit2314c27dd650dc02c0b5bdd3bef75818393a9ab5 (patch)
tree231815c866a1330338d976480284250e99207554 /src/core/netserver.h
parent7e99fac4552b402034e5fc3e833cbe8c274f95ce (diff)
switched to UDP networking
Diffstat (limited to 'src/core/netserver.h')
-rw-r--r--src/core/netserver.h48
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];
};
}