diff --git a/src/game_defs.h b/src/game_defs.h index f43ae8ab..fe8aa081 100644 --- a/src/game_defs.h +++ b/src/game_defs.h @@ -38,10 +38,16 @@ #define POKERTH_GT_STYLE_FILE_VERSION 1 #define POKERTH_CD_STYLE_FILE_VERSION 1 -enum ServerNetworkMode { - NETWORK_MODE_TCP = 1, - NETWORK_MODE_SCTP = 2, - NETWORK_MODE_TCP_SCTP = 3}; +enum ServerMode { + SERVER_MODE_LAN, + SERVER_MODE_INTERNET_NOAUTH, + SERVER_MODE_INTERNET_AUTH +}; + +enum ServerTransportProtocol { + TRANSPORT_PROTOCOL_TCP = 1, + TRANSPORT_PROTOCOL_SCTP = 2, + TRANSPORT_PROTOCOL_TCP_SCTP = 3}; enum GameState { GAME_STATE_PREFLOP = 0, diff --git a/src/gui/qt/startwindow/startwindowimpl.cpp b/src/gui/qt/startwindow/startwindowimpl.cpp index 286ff07a..5f977755 100644 --- a/src/gui/qt/startwindow/startwindowimpl.cpp +++ b/src/gui/qt/startwindow/startwindowimpl.cpp @@ -400,7 +400,7 @@ void startWindowImpl::callCreateNetworkGameDialog() { // Clear network game dialog. myStartNetworkGameDialog->clearDialog(); - myServerGuiInterface->getSession()->startNetworkServer(); + myServerGuiInterface->getSession()->startNetworkServer(false); mySession->startNetworkClientForLocalServer(gameData); myStartNetworkGameDialog->setMaxPlayerNumber(gameData.maxNumberOfPlayers); diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 7bbb593e..216f6cbe 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -138,10 +138,10 @@ private: }; -ServerLobbyThread::ServerLobbyThread(GuiInterface &gui, ServerIrcBotCallback &ircBotCb, ConfigFile *playerConfig, AvatarManager &avatarManager, - boost::shared_ptr ioService) +ServerLobbyThread::ServerLobbyThread(GuiInterface &gui, ServerMode mode, ServerIrcBotCallback &ircBotCb, ConfigFile *playerConfig, + AvatarManager &avatarManager, boost::shared_ptr ioService) : m_ioService(ioService), m_authContext(NULL), m_gui(gui), m_ircBotCb(ircBotCb), m_avatarManager(avatarManager), - m_playerConfig(playerConfig), m_curGameId(0), m_curUniquePlayerId(0), m_curSessionId(INVALID_SESSION + 1), + m_mode(mode), m_playerConfig(playerConfig), m_curGameId(0), m_curUniquePlayerId(0), m_curSessionId(INVALID_SESSION + 1), m_statDataChanged(false), m_removeGameTimer(*ioService), m_removePlayerTimer(*ioService), m_sessionTimeoutTimer(*ioService), m_avatarCleanupTimer(*ioService), m_saveStatisticsTimer(*ioService), m_avatarLockTimer(*ioService), @@ -161,9 +161,8 @@ ServerLobbyThread::~ServerLobbyThread() } void -ServerLobbyThread::Init(const string &pwd, const string &logDir) +ServerLobbyThread::Init(const string &logDir) { - m_password = pwd; // Read previous server statistics. if (!logDir.empty()) { @@ -225,8 +224,18 @@ ServerLobbyThread::AddConnection(boost::shared_ptr sock) netAnnounce->latestGameVersion.major = POKERTH_VERSION_MAJOR; netAnnounce->latestGameVersion.minor = POKERTH_VERSION_MINOR; netAnnounce->latestBetaRevision = POKERTH_BETA_REVISION; - // TODO - netAnnounce->serverType = serverType_serverTypeLAN; + switch (m_mode) + { + case SERVER_MODE_LAN: + netAnnounce->serverType = serverType_serverTypeLAN; + break; + case SERVER_MODE_INTERNET_NOAUTH: + netAnnounce->serverType = serverType_serverTypeInternetNoAuth; + break; + case SERVER_MODE_INTERNET_AUTH: + netAnnounce->serverType = serverType_serverTypeInternetAuth; + break; + } GetSender().Send(sessionData, packet); sock->async_read_some( @@ -1894,12 +1903,6 @@ ServerLobbyThread::GetReceiver() return *m_receiver; } -bool -ServerLobbyThread::CheckPassword(const string &password) const -{ - return (password == m_password); -} - InternalServerCallback & ServerLobbyThread::GetSenderCallback() { diff --git a/src/net/common/servermanager.cpp b/src/net/common/servermanager.cpp index bd193b79..20841c4c 100644 --- a/src/net/common/servermanager.cpp +++ b/src/net/common/servermanager.cpp @@ -44,21 +44,22 @@ ServerManager::~ServerManager() } void -ServerManager::Init(unsigned serverPort, bool ipv6, ServerNetworkMode mode, const string &pwd, const string &logDir, boost::shared_ptr ircAdminThread, boost::shared_ptr ircLobbyThread) +ServerManager::Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, ServerMode mode, const string &logDir, boost::shared_ptr ircAdminThread, boost::shared_ptr ircLobbyThread) { - m_lobbyThread.reset(new ServerLobbyThread(GetGui(), *m_lobbyBot, m_playerConfig, m_avatarManager, m_ioService)); - GetLobbyThread().Init(pwd, logDir); + m_lobbyThread.reset(new ServerLobbyThread(GetGui(), mode, *m_lobbyBot, m_playerConfig, m_avatarManager, m_ioService)); + GetLobbyThread().Init(logDir); m_adminBot->Init(m_lobbyThread, ircAdminThread); m_lobbyBot->Init(m_lobbyThread, ircLobbyThread); - if (mode & NETWORK_MODE_TCP) + if (proto & TRANSPORT_PROTOCOL_TCP) { boost::shared_ptr tcpAcceptHelper(new ServerAcceptHelper(GetGui(), m_ioService)); tcpAcceptHelper->Listen(serverPort, ipv6, false, logDir, m_lobbyThread); m_acceptHelperPool.push_back(tcpAcceptHelper); } -/* if (mode & NETWORK_MODE_SCTP) + // TODO: Re-add SCTP support once asio supports SCTP. +/* if (mode & TRANSPORT_PROTOCOL_SCTP) { boost::shared_ptr sctpAcceptHelper(new ServerAcceptHelper(GetGui(), m_ioService)); sctpAcceptHelper->Listen(serverPort, ipv6, true, logDir, m_lobbyThread); diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index 652f5195..b427966d 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -53,11 +53,11 @@ struct Gsasl; class ServerLobbyThread : public Thread, public boost::enable_shared_from_this { public: - ServerLobbyThread(GuiInterface &gui, ServerIrcBotCallback &ircBotCb, ConfigFile *playerConfig, AvatarManager &avatarManager, + ServerLobbyThread(GuiInterface &gui, ServerMode mode, ServerIrcBotCallback &ircBotCb, ConfigFile *playerConfig, AvatarManager &avatarManager, boost::shared_ptr ioService); virtual ~ServerLobbyThread(); - void Init(const std::string &pwd, const std::string &logDir); + void Init(const std::string &logDir); virtual void SignalTermination(); void AddConnection(boost::shared_ptr sock); @@ -176,8 +176,6 @@ protected: ReceiverHelper &GetReceiver(); - bool CheckPassword(const std::string &password) const; - InternalServerCallback &GetSenderCallback(); GuiInterface &GetGui(); ServerIrcBotCallback &GetIrcBotCallback(); @@ -220,7 +218,7 @@ private: ServerIrcBotCallback &m_ircBotCb; AvatarManager &m_avatarManager; - std::string m_password; + ServerMode m_mode; std::string m_statisticsFileName; ConfigFile *m_playerConfig; u_int32_t m_curGameId; diff --git a/src/net/servermanager.h b/src/net/servermanager.h index b5fec8ef..f64f4650 100644 --- a/src/net/servermanager.h +++ b/src/net/servermanager.h @@ -44,7 +44,7 @@ public: virtual ~ServerManager(); // Set the parameters. - void Init(unsigned serverPort, bool ipv6, ServerNetworkMode mode, const std::string &pwd, const std::string &logDir, boost::shared_ptr ircAdminThread, boost::shared_ptr ircLobbyThread); + void Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, ServerMode mode, const std::string &logDir, boost::shared_ptr ircAdminThread, boost::shared_ptr ircLobbyThread); // Main start function. void RunAll(); diff --git a/src/pokerth_server.cpp b/src/pokerth_server.cpp index ba9d39a8..51f21455 100644 --- a/src/pokerth_server.cpp +++ b/src/pokerth_server.cpp @@ -164,7 +164,7 @@ main(int argc, char *argv[]) LOG_ERROR("Missing files - please check your directory settings!"); myServerGuiInterface->setSession(session); - myServerGuiInterface->getSession()->startNetworkServer(); + myServerGuiInterface->getSession()->startNetworkServer(true); while (!g_pokerthTerminate) { Thread::Msleep(100); diff --git a/src/session.cpp b/src/session.cpp index 75a821d7..2e3588cc 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -266,7 +266,7 @@ void Session::clientJoinGame(unsigned gameId, const std::string &password) myNetClient->SendJoinGame(gameId, password); } -void Session::startNetworkServer() +void Session::startNetworkServer(bool dedicated) { if (myNetServer) { @@ -304,11 +304,23 @@ void Session::startNetworkServer() myConfig->readConfigString("LobbyIRCChannelPassword")); } + ServerMode mode; + if (dedicated) + { + #ifdef POKERTH_OFFICIAL_SERVER + mode = SERVER_MODE_INTERNET_AUTH; + #else + mode = SERVER_MODE_INTERNET_NOAUTH; + #endif + } + else + mode = SERVER_MODE_LAN; + myNetServer->Init( myConfig->readConfigInt("ServerPort"), myConfig->readConfigInt("ServerUseIpv6") == 1, - myConfig->readConfigInt("ServerUseSctp") == 1 ? NETWORK_MODE_TCP_SCTP : NETWORK_MODE_TCP, - myConfig->readConfigString("ServerPassword"), + myConfig->readConfigInt("ServerUseSctp") == 1 ? TRANSPORT_PROTOCOL_TCP_SCTP : TRANSPORT_PROTOCOL_TCP, + mode, myQtToolsInterface->stringFromUtf8(myConfig->readConfigString("LogDir")), tmpIrcAdminThread, tmpIrcLobbyThread diff --git a/src/session.h b/src/session.h index f2e72592..69478ec5 100755 --- a/src/session.h +++ b/src/session.h @@ -69,7 +69,7 @@ public: void clientCreateGame(const GameData &gameData, const std::string &name, const std::string &password); void clientJoinGame(unsigned gameId, const std::string &password); - void startNetworkServer(); + void startNetworkServer(bool dedicated); void sendLeaveCurrentGame(); void sendStartEvent(bool fillUpWithCpuPlayers); void terminateNetworkServer();