Do not autostart network games. Do not start admin timer for network games.

This commit is contained in:
lotodore
2010-09-04 23:00:39 +00:00
parent 8157ff63b6
commit 0829e80d49
7 changed files with 60 additions and 35 deletions
+2 -2
View File
@@ -32,8 +32,8 @@
#include <fstream> #include <fstream>
#include <cstring> #include <cstring>
#define MAX_NUMBER_OF_FILES GetMaxNumberOfAvatarFiles() #define MAX_NUMBER_OF_FILES NetHelper::GetMaxNumberOfAvatarFiles()
#define MAX_AVATAR_CACHE_AGE GetMaxAvatarCacheAgeSec() #define MAX_AVATAR_CACHE_AGE NetHelper::GetMaxAvatarCacheAgeSec()
#define PNG_HEADER "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" #define PNG_HEADER "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
#define PNG_HEADER_SIZE (sizeof(PNG_HEADER) - 1) #define PNG_HEADER_SIZE (sizeof(PNG_HEADER) - 1)
+7 -2
View File
@@ -24,14 +24,19 @@
#include <net/net_helper.h> #include <net/net_helper.h>
unsigned unsigned
GetMaxNumberOfAvatarFiles() NetHelper::GetMaxNumberOfAvatarFiles()
{ {
return 256; return 256;
} }
unsigned unsigned
GetMaxAvatarCacheAgeSec() NetHelper::GetMaxAvatarCacheAgeSec()
{ {
return 604800; // 1 Week return 604800; // 1 Week
} }
unsigned
NetHelper::GetLoginLockSec()
{
return 1;
}
+7 -2
View File
@@ -24,14 +24,19 @@
#include <net/net_helper.h> #include <net/net_helper.h>
unsigned unsigned
GetMaxNumberOfAvatarFiles() NetHelper::GetMaxNumberOfAvatarFiles()
{ {
return 2048; return 2048;
} }
unsigned unsigned
GetMaxAvatarCacheAgeSec() NetHelper::GetMaxAvatarCacheAgeSec()
{ {
return 2592000; // 1 Month return 2592000; // 1 Month
} }
unsigned
NetHelper::GetLoginLockSec()
{
return 30;
}
+18 -10
View File
@@ -413,11 +413,15 @@ ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, Sess
void void
ServerGameStateInit::RegisterAdminTimer(boost::shared_ptr<ServerGame> server) ServerGameStateInit::RegisterAdminTimer(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer1().expires_from_now( // No admin timeout in LAN games.
boost::posix_time::seconds(SERVER_GAME_ADMIN_TIMEOUT_SEC - SERVER_GAME_ADMIN_WARNING_REMAINING_SEC)); if (server->GetLobbyThread().GetServerMode() != SERVER_MODE_LAN)
server->GetStateTimer1().async_wait( {
boost::bind( server->GetStateTimer1().expires_from_now(
&ServerGameStateInit::TimerAdminWarning, this, boost::asio::placeholders::error, server)); boost::posix_time::seconds(SERVER_GAME_ADMIN_TIMEOUT_SEC - SERVER_GAME_ADMIN_WARNING_REMAINING_SEC));
server->GetStateTimer1().async_wait(
boost::bind(
&ServerGameStateInit::TimerAdminWarning, this, boost::asio::placeholders::error, server));
}
} }
void void
@@ -429,11 +433,15 @@ ServerGameStateInit::UnregisterAdminTimer(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateInit::RegisterAutoStartTimer(boost::shared_ptr<ServerGame> server) ServerGameStateInit::RegisterAutoStartTimer(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer2().expires_from_now( // No autostart in LAN games.
boost::posix_time::seconds(SERVER_AUTOSTART_GAME_DELAY_SEC)); if (server->GetLobbyThread().GetServerMode() != SERVER_MODE_LAN)
server->GetStateTimer2().async_wait( {
boost::bind( server->GetStateTimer2().expires_from_now(
&ServerGameStateInit::TimerAutoStart, this, boost::asio::placeholders::error, server)); boost::posix_time::seconds(SERVER_AUTOSTART_GAME_DELAY_SEC));
server->GetStateTimer2().async_wait(
boost::bind(
&ServerGameStateInit::TimerAutoStart, this, boost::asio::placeholders::error, server));
}
} }
void void
+18 -17
View File
@@ -58,14 +58,13 @@
#define SERVER_UPDATE_LOGIN_LOCK_INTERVAL_MSEC 1000 #define SERVER_UPDATE_LOGIN_LOCK_INTERVAL_MSEC 1000
#define SERVER_PROCESS_SEND_INTERVAL_MSEC 10 #define SERVER_PROCESS_SEND_INTERVAL_MSEC 10
#define SERVER_INIT_LOGIN_CLIENT_LOCK_SEC 30 // Forbid a client to send an additional avatar. #define SERVER_INIT_LOGIN_CLIENT_LOCK_SEC NetHelper::GetLoginLockSec()
#define SERVER_INIT_SESSION_TIMEOUT_SEC 60 #define SERVER_INIT_SESSION_TIMEOUT_SEC 60
#define SERVER_TIMEOUT_WARNING_REMAINING_SEC 60 #define SERVER_TIMEOUT_WARNING_REMAINING_SEC 60
#define SERVER_SESSION_ACTIVITY_TIMEOUT_SEC 1800 // 30 min, MUST be > SERVER_TIMEOUT_WARNING_REMAINING_SEC #define SERVER_SESSION_ACTIVITY_TIMEOUT_SEC 1800 // 30 min, MUST be > SERVER_TIMEOUT_WARNING_REMAINING_SEC
#define SERVER_SESSION_FORCED_TIMEOUT_SEC 86400 // 1 day, should be quite large. #define SERVER_SESSION_FORCED_TIMEOUT_SEC 86400 // 1 day, should be quite large.
#define SERVER_STATISTICS_FILE_NAME "server_statistics.log" #define SERVER_STATISTICS_FILE_NAME "server_statistics.log"
#define SERVER_STATISTICS_STR_TOTAL_PLAYERS "TotalNumPlayersLoggedIn" #define SERVER_STATISTICS_STR_TOTAL_PLAYERS "TotalNumPlayersLoggedIn"
#define SERVER_STATISTICS_STR_TOTAL_GAMES "TotalNumGamesCreated" #define SERVER_STATISTICS_STR_TOTAL_GAMES "TotalNumGamesCreated"
@@ -637,6 +636,12 @@ ServerLobbyThread::GetStartTime() const
return m_startTime; return m_startTime;
} }
ServerMode
ServerLobbyThread::GetServerMode() const
{
return m_mode;
}
SenderHelper & SenderHelper &
ServerLobbyThread::GetSender() ServerLobbyThread::GetSender()
{ {
@@ -989,22 +994,18 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
// Before any other processing, perform some denial of service and // Before any other processing, perform some denial of service and
// brute force attack prevention by checking whether the user recently sent an // brute force attack prevention by checking whether the user recently sent an
// Init packet. // Init packet.
// This check is not performed on LAN servers. bool recentlySentInit = false;
if (m_mode != SERVER_MODE_LAN)
{ {
bool recentlySentInit = false; boost::mutex::scoped_lock lock(m_timerClientAddressMapMutex);
{ if (m_timerClientAddressMap.find(session.sessionData->GetClientAddr()) != m_timerClientAddressMap.end())
boost::mutex::scoped_lock lock(m_timerClientAddressMapMutex); recentlySentInit = true;
if (m_timerClientAddressMap.find(session.sessionData->GetClientAddr()) != m_timerClientAddressMap.end()) else
recentlySentInit = true; m_timerClientAddressMap[session.sessionData->GetClientAddr()] = boost::timers::portable::microsec_timer();
else }
m_timerClientAddressMap[session.sessionData->GetClientAddr()] = boost::timers::portable::microsec_timer(); if (recentlySentInit)
} {
if (recentlySentInit) SessionError(session, ERR_NET_INIT_BLOCKED);
{ return;
SessionError(session, ERR_NET_INIT_BLOCKED);
return;
}
} }
// Check the protocol version. // Check the protocol version.
+7 -2
View File
@@ -23,8 +23,13 @@
#define SERVER_COMPUTER_PLAYER_NAME "Computer" #define SERVER_COMPUTER_PLAYER_NAME "Computer"
#define SERVER_GUEST_PLAYER_NAME "Guest" #define SERVER_GUEST_PLAYER_NAME "Guest"
unsigned GetMaxNumberOfAvatarFiles(); class NetHelper
unsigned GetMaxAvatarCacheAgeSec(); {
public:
static unsigned GetMaxNumberOfAvatarFiles();
static unsigned GetMaxAvatarCacheAgeSec();
static unsigned GetLoginLockSec();
};
#endif #endif
+1
View File
@@ -103,6 +103,7 @@ public:
ServerStats GetStats() const; ServerStats GetStats() const;
boost::posix_time::ptime GetStartTime() const; boost::posix_time::ptime GetStartTime() const;
ServerMode GetServerMode() const;
SenderHelper &GetSender(); SenderHelper &GetSender();
boost::asio::io_service &GetIOService(); boost::asio::io_service &GetIOService();