Rewriting sender yet again to fit the new asio design. Polling for new send data is no longer needed, this also reduces lag.
This commit is contained in:
@@ -140,7 +140,7 @@ ServerLobbyThread::AddConnection(boost::shared_ptr<tcp::socket> sock)
|
||||
//}
|
||||
|
||||
// Create a new session.
|
||||
boost::shared_ptr<SessionData> sessionData(new SessionData(sock, m_curSessionId++, m_sender, *m_senderCallback));
|
||||
boost::shared_ptr<SessionData> sessionData(new SessionData(sock, m_curSessionId++, *m_senderCallback));
|
||||
m_sessionManager.AddSession(sessionData);
|
||||
|
||||
LOG_VERBOSE("Accepted connection - session #" << sessionData->GetId() << ".");
|
||||
@@ -191,7 +191,7 @@ ServerLobbyThread::ReAddSession(SessionWrapper session, int reason)
|
||||
NetPacketRemovedFromGame::Data removedData;
|
||||
removedData.removeReason = reason;
|
||||
static_cast<NetPacketRemovedFromGame *>(packet.get())->SetData(removedData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
||||
GetSender().Send(session.sessionData, packet);
|
||||
|
||||
HandleReAddedSession(session);
|
||||
}
|
||||
@@ -247,8 +247,8 @@ ServerLobbyThread::NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId)
|
||||
packetData.gameId = gameId;
|
||||
packetData.playerId = playerId;
|
||||
static_cast<NetPacketGameListPlayerJoined *>(packet.get())->SetData(packetData);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -260,8 +260,8 @@ ServerLobbyThread::NotifyPlayerLeftGame(unsigned gameId, unsigned playerId)
|
||||
packetData.gameId = gameId;
|
||||
packetData.playerId = playerId;
|
||||
static_cast<NetPacketGameListPlayerLeft *>(packet.get())->SetData(packetData);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -273,24 +273,24 @@ ServerLobbyThread::NotifyGameAdminChanged(unsigned gameId, unsigned newAdminPlay
|
||||
packetData.gameId = gameId;
|
||||
packetData.newAdminplayerId = newAdminPlayerId;
|
||||
static_cast<NetPacketGameListAdminChanged *>(packet.get())->SetData(packetData);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::NotifyStartingGame(unsigned gameId)
|
||||
{
|
||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_STARTED);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::NotifyReopeningGame(unsigned gameId)
|
||||
{
|
||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_CREATED);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -422,7 +422,7 @@ ServerLobbyThread::SendGlobalChat(const string &message)
|
||||
outChatData.playerId = 0;
|
||||
outChatData.text = message;
|
||||
static_cast<NetPacketChatText *>(outChat.get())->SetData(outChatData);
|
||||
m_gameSessionManager.SendToAllSessions(outChat, SessionData::Game);
|
||||
m_gameSessionManager.SendToAllSessions(GetSender(), outChat, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -432,7 +432,7 @@ ServerLobbyThread::SendGlobalMsgBox(const string &message)
|
||||
NetPacketMsgBoxText::Data outMsgData;
|
||||
outMsgData.text = message;
|
||||
static_cast<NetPacketMsgBoxText *>(outMsg.get())->SetData(outMsgData);
|
||||
m_gameSessionManager.SendToAllSessions(outMsg, SessionData::Game);
|
||||
m_gameSessionManager.SendToAllSessions(GetSender(), outMsg, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -474,7 +474,7 @@ ServerLobbyThread::GetStartTime() const
|
||||
return m_startTime;
|
||||
}
|
||||
|
||||
SenderInterface &
|
||||
SenderHelper &
|
||||
ServerLobbyThread::GetSender()
|
||||
{
|
||||
assert(m_sender);
|
||||
@@ -560,11 +560,6 @@ ServerLobbyThread::RegisterTimers()
|
||||
SERVER_UPDATE_AVATAR_LOCK_INTERVAL_MSEC,
|
||||
boost::bind(&ServerLobbyThread::TimerUpdateClientAvatarLock, this),
|
||||
true);
|
||||
// Check if new data needs to be sent.
|
||||
m_timerManager.RegisterTimer(
|
||||
SERVER_PROCESS_SEND_INTERVAL_MSEC,
|
||||
boost::bind(&SenderInterface::Process, m_sender),
|
||||
true);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -891,7 +886,7 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
||||
infoData.playerInfo.avatarType = AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile());
|
||||
}
|
||||
static_cast<NetPacketPlayerInfo *>(info.get())->SetData(infoData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, info);
|
||||
GetSender().Send(session.sessionData, info);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -900,7 +895,7 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
||||
NetPacketUnknownPlayerId::Data unknownData;
|
||||
unknownData.playerId = request.playerId;
|
||||
static_cast<NetPacketUnknownPlayerId *>(unknown.get())->SetData(unknownData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, unknown);
|
||||
GetSender().Send(session.sessionData, unknown);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -918,7 +913,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const N
|
||||
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets) == 0)
|
||||
{
|
||||
avatarFound = true;
|
||||
session.sessionData->GetSender().Send(session.sessionData, tmpPackets);
|
||||
GetSender().Send(session.sessionData, tmpPackets);
|
||||
}
|
||||
else
|
||||
LOG_ERROR("Failed to read avatar file for network transmission.");
|
||||
@@ -931,7 +926,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const N
|
||||
NetPacketUnknownAvatar::Data unknownData;
|
||||
unknownData.requestId = request.requestId;
|
||||
static_cast<NetPacketUnknownAvatar *>(unknown.get())->SetData(unknownData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, unknown);
|
||||
GetSender().Send(session.sessionData, unknown);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1001,7 +996,7 @@ ServerLobbyThread::EstablishSession(SessionWrapper session)
|
||||
initAckData.sessionId = session.sessionData->GetId(); // TODO: currently unused.
|
||||
initAckData.playerId = session.playerData->GetUniqueId();
|
||||
static_cast<NetPacketInitAck *>(initAck.get())->SetData(initAckData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, initAck);
|
||||
GetSender().Send(session.sessionData, initAck);
|
||||
|
||||
// Send the game list to the client.
|
||||
SendGameList(session.sessionData);
|
||||
@@ -1033,7 +1028,7 @@ ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session)
|
||||
retrieveAvatarData.requestId = session.playerData->GetUniqueId();
|
||||
retrieveAvatarData.avatar = session.playerData->GetAvatarMD5();
|
||||
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, retrieveAvatar);
|
||||
GetSender().Send(session.sessionData, retrieveAvatar);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1129,8 +1124,8 @@ ServerLobbyThread::InternalAddGame(boost::shared_ptr<ServerGame> game)
|
||||
// Add game to list.
|
||||
m_gameMap.insert(GameMap::value_type(game->GetId(), game));
|
||||
// Notify all players.
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(CreateNetPacketGameListNew(*game), SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(CreateNetPacketGameListNew(*game), SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Game);
|
||||
|
||||
{
|
||||
boost::mutex::scoped_lock lock(m_statMutex);
|
||||
@@ -1161,8 +1156,8 @@ ServerLobbyThread::InternalRemoveGame(boost::shared_ptr<ServerGame> game)
|
||||
game->RemoveAllSessions();
|
||||
// Notify all players.
|
||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(game->GetId(), GAME_MODE_CLOSED);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1204,7 +1199,7 @@ ServerLobbyThread::InternalResubscribeMsg(SessionWrapper session)
|
||||
try {
|
||||
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
||||
|
||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
||||
GetSender().Send(session.sessionData, packet);
|
||||
} catch (const NetException &)
|
||||
{
|
||||
// Ignore errors for now.
|
||||
@@ -1253,7 +1248,7 @@ ServerLobbyThread::InternalCheckSessionTimeouts(SessionWrapper session)
|
||||
warningData.timeoutReason = NETWORK_TIMEOUT_GENERIC;
|
||||
warningData.remainingSeconds = SERVER_TIMEOUT_WARNING_REMAINING_SEC;
|
||||
static_cast<NetPacketTimeoutWarning *>(packet.get())->SetData(warningData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
||||
GetSender().Send(session.sessionData, packet);
|
||||
}
|
||||
else if (session.sessionData->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC)
|
||||
{
|
||||
@@ -1290,7 +1285,7 @@ ServerLobbyThread::SendError(boost::shared_ptr<SessionData> s, int errorCode)
|
||||
NetPacketError::Data errorData;
|
||||
errorData.errorCode = errorCode;
|
||||
static_cast<NetPacketError *>(packet.get())->SetData(errorData);
|
||||
s->GetSender().Send(s, packet);
|
||||
GetSender().Send(s, packet);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1300,7 +1295,7 @@ ServerLobbyThread::SendJoinGameFailed(boost::shared_ptr<SessionData> s, int reas
|
||||
NetPacketJoinGameFailed::Data failedData;
|
||||
failedData.failureCode = reason;
|
||||
static_cast<NetPacketJoinGameFailed *>(packet.get())->SetData(failedData);
|
||||
s->GetSender().Send(s, packet);
|
||||
GetSender().Send(s, packet);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1310,7 +1305,7 @@ ServerLobbyThread::SendGameList(boost::shared_ptr<SessionData> s)
|
||||
GameMap::const_iterator game_end = m_gameMap.end();
|
||||
while (game_i != game_end)
|
||||
{
|
||||
s->GetSender().Send(s, CreateNetPacketGameListNew(*game_i->second));
|
||||
GetSender().Send(s, CreateNetPacketGameListNew(*game_i->second));
|
||||
++game_i;
|
||||
}
|
||||
}
|
||||
@@ -1345,8 +1340,8 @@ ServerLobbyThread::BroadcastStatisticsUpdate(const ServerStats &stats)
|
||||
try {
|
||||
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
||||
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
} catch (const NetException &)
|
||||
{
|
||||
// Ignore errors for now.
|
||||
|
||||
Reference in New Issue
Block a user