Adding backward compatibility for 0.6 clients. They cannot join games with > 7 players.

This commit is contained in:
lotodore
2009-04-11 12:32:54 +00:00
parent dae16675a4
commit 992dd4b618
5 changed files with 29 additions and 2 deletions
+5
View File
@@ -308,6 +308,11 @@ ServerGameStateInit::HandleNewSession(ServerGameThread &server, SessionWrapper s
{ {
server.MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL); server.MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
} }
// Check whether the client supports the current game.
else if (curNumPlayers >= session.sessionData->GetMaxNumPlayers())
{
server.MoveSessionToLobby(session, NTF_NET_NEW_RELEASE_AVAILABLE);
}
else else
{ {
if (session.playerData->GetUniqueId() == server.GetAdminPlayerId()) if (session.playerData->GetUniqueId() == server.GetAdminPlayerId())
+4
View File
@@ -568,6 +568,10 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const NetPacketIn
SessionError(session, ERR_NET_VERSION_NOT_SUPPORTED); SessionError(session, ERR_NET_VERSION_NOT_SUPPORTED);
return; return;
} }
if (initData.versionMajor == 5 && (initData.versionMinor == 0 || initData.versionMinor == 1))
session.sessionData->SetMaxNumPlayers(7);
else
session.sessionData->SetMaxNumPlayers(MAX_NUMBER_OF_PLAYERS);
// Check the server password. // Check the server password.
if (!CheckPassword(initData.password)) if (!CheckPassword(initData.password))
+15 -1
View File
@@ -22,7 +22,8 @@
SessionData::SessionData(SOCKET sockfd, SessionId id, boost::shared_ptr<SenderInterface> sender, SessionDataCallback &cb, boost::asio::io_service &ioService) SessionData::SessionData(SOCKET sockfd, SessionId id, boost::shared_ptr<SenderInterface> sender, SessionDataCallback &cb, boost::asio::io_service &ioService)
: m_id(id), m_state(SessionData::Init), m_readyFlag(false), : m_id(id), m_state(SessionData::Init), m_readyFlag(false),
m_wantsLobbyMsg(true), m_activityTimeoutNoticeSent(false), m_callback(cb) m_wantsLobbyMsg(true), m_activityTimeoutNoticeSent(false), m_callback(cb),
m_maxNumPlayers(0)
{ {
m_socket.reset(new boost::asio::ip::tcp::socket( m_socket.reset(new boost::asio::ip::tcp::socket(
ioService, boost::asio::ip::tcp::v6(), sockfd)); ioService, boost::asio::ip::tcp::v6(), sockfd));
@@ -173,3 +174,16 @@ SessionData::GetAutoDisconnectTimerElapsedSec() const
return m_autoDisconnectTimer.elapsed().total_seconds(); return m_autoDisconnectTimer.elapsed().total_seconds();
} }
unsigned
SessionData::GetMaxNumPlayers() const
{
boost::mutex::scoped_lock lock(m_dataMutex);
return m_maxNumPlayers;
}
void
SessionData::SetMaxNumPlayers(unsigned numPlayers)
{
boost::mutex::scoped_lock lock(m_dataMutex);
m_maxNumPlayers = numPlayers;
}
+1 -1
View File
@@ -31,7 +31,7 @@
#include <list> #include <list>
#define NET_VERSION_MAJOR 5 #define NET_VERSION_MAJOR 5
#define NET_VERSION_MINOR 1 #define NET_VERSION_MINOR 2
#define MIN_PACKET_SIZE 4 #define MIN_PACKET_SIZE 4
#define MAX_PACKET_SIZE 268 #define MAX_PACKET_SIZE 268
+4
View File
@@ -71,6 +71,9 @@ public:
void MarkActivityNotice(); void MarkActivityNotice();
unsigned GetAutoDisconnectTimerElapsedSec() const; unsigned GetAutoDisconnectTimerElapsedSec() const;
unsigned GetMaxNumPlayers() const;
void SetMaxNumPlayers(unsigned numPlayers);
private: private:
boost::shared_ptr<boost::asio::ip::tcp::socket> m_socket; boost::shared_ptr<boost::asio::ip::tcp::socket> m_socket;
const SessionId m_id; const SessionId m_id;
@@ -84,6 +87,7 @@ private:
boost::timers::portable::microsec_timer m_autoDisconnectTimer; boost::timers::portable::microsec_timer m_autoDisconnectTimer;
boost::shared_ptr<SenderInterface> m_sender; boost::shared_ptr<SenderInterface> m_sender;
SessionDataCallback &m_callback; SessionDataCallback &m_callback;
unsigned m_maxNumPlayers;
mutable boost::mutex m_dataMutex; mutable boost::mutex m_dataMutex;
}; };