diff --git a/server/server.cpp b/server/server.cpp index 0142057..7fc20c8 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -10,6 +10,7 @@ using namespace std; Server::Server() { running = true; + config.Load("config.cfg"); } Server::~Server() { @@ -20,7 +21,7 @@ void Server::Init() { if (SDLNet_Init()) { throw(runtime_error("Failed to init SDL_net")); } - netMgr.Init(100); + netMgr.Init(config.Integer("port"), config.Integer("maxplayers")); } void Server::Proc() { @@ -28,6 +29,9 @@ void Server::Proc() { HandleInput(); UpdateWorld(); HandleOutput(); + + //debug + running = false; } } @@ -38,7 +42,11 @@ void Server::Quit() { void Server::HandleInput() { //accept new connections + netMgr.AcceptConnections(); //accept updates from the clients + netMgr.CheckSockets(); + //read the updates from the clients into internal containers + //... } void Server::UpdateWorld() { diff --git a/server/server.hpp b/server/server.hpp index 9682950..c2a4ccc 100644 --- a/server/server.hpp +++ b/server/server.hpp @@ -2,6 +2,7 @@ #define SERVER_HPP_ #include "tcp_network_manager.hpp" +#include "config_utility.hpp" class Server { public: @@ -18,6 +19,7 @@ public: private: bool running; TCPNetworkManager netMgr; + ConfigUtility config; }; #endif diff --git a/server/tcp_network_manager.cpp b/server/tcp_network_manager.cpp index 326bb7b..25dc8dd 100644 --- a/server/tcp_network_manager.cpp +++ b/server/tcp_network_manager.cpp @@ -1,22 +1,34 @@ #include "tcp_network_manager.hpp" +#include + TCPNetworkManager::TCPNetworkManager() { - maxConnections = currentConnections = 0; + // } TCPNetworkManager::~TCPNetworkManager() { // } -void TCPNetworkManager::Init(int maxConnections) { - // +void TCPNetworkManager::Init(Uint16 port, int maxSockets) { + IPaddress add; + if (SDLNet_ResolveHost(&add, nullptr, port)) { + throw(std::runtime_error("Failed to resolve the host")); + } + if (!(sock = SDLNet_TCP_Open(&add))) { + throw(std::runtime_error("Failed to create the server socket")); + } + if (!(clientSocks = SDLNet_AllocSocketSet(maxSockets))) { + throw(std::runtime_error("Failed to allocate the socket set")); + } } void TCPNetworkManager::Quit() { - // + SDLNet_FreeSocketSet(clientSocks); + SDLNet_TCP_Close(sock); } -int TCPNetworkManager::AcceptConnection() { +int TCPNetworkManager::AcceptConnections() { // } @@ -44,10 +56,10 @@ int TCPNetworkManager::CloseSocket(int index) { // } -int TCPNetworkManager::GetMaxConnections() { +int TCPNetworkManager::GetMaxConnections() const { // } -int TCPNetworkManager::GetCurrentConnections() { +int TCPNetworkManager::GetCurrentConnections() const { // } diff --git a/server/tcp_network_manager.hpp b/server/tcp_network_manager.hpp index 0010df7..7df210b 100644 --- a/server/tcp_network_manager.hpp +++ b/server/tcp_network_manager.hpp @@ -8,10 +8,10 @@ public: TCPNetworkManager(); ~TCPNetworkManager(); - void Init(int maxConnections); + void Init(Uint16 port, int maxSockets); void Quit(); - int AcceptConnection(); + int AcceptConnections(); int CheckSockets(); int Send(int index, const void* data, int len); @@ -21,12 +21,11 @@ public: TCPsocket GetSocket(int index); int CloseSocket(int index); - int GetMaxConnections(); - int GetCurrentConnections(); + int GetMaxConnections() const; + int GetCurrentConnections() const; private: - TCPsocket serverSocket; - SDLNet_SocketSet socketSet; - int maxConnections, currentConnections; + TCPsocket sock; + SDLNet_SocketSet clientSocks; }; #endif