Remove sender thread for avatars, it caused loads of problems, one of these being that packets were "destroyed" because half-sent packets were made invalid. Use main sender instead.
This commit is contained in:
@@ -39,8 +39,6 @@
|
|||||||
#define SERVER_SAVE_STATISTICS_INTERVAL_SEC 60
|
#define SERVER_SAVE_STATISTICS_INTERVAL_SEC 60
|
||||||
#define SERVER_INIT_SESSION_TIMEOUT_SEC 20
|
#define SERVER_INIT_SESSION_TIMEOUT_SEC 20
|
||||||
|
|
||||||
#define SERVER_NUM_AVATAR_SENDER_THREADS 1
|
|
||||||
|
|
||||||
#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"
|
||||||
@@ -75,8 +73,6 @@ ServerLobbyThread::ServerLobbyThread(GuiInterface &gui, ConfigFile *playerConfig
|
|||||||
{
|
{
|
||||||
m_senderCallback.reset(new ServerSenderCallback(*this));
|
m_senderCallback.reset(new ServerSenderCallback(*this));
|
||||||
m_sender.reset(new SenderThread(GetSenderCallback()));
|
m_sender.reset(new SenderThread(GetSenderCallback()));
|
||||||
for (int i = 0; i < SERVER_NUM_AVATAR_SENDER_THREADS; i++)
|
|
||||||
m_avatarSenderThreadPool.push_back(boost::shared_ptr<SenderThread>(new SenderThread(GetSenderCallback())));
|
|
||||||
m_receiver.reset(new ReceiverHelper);
|
m_receiver.reset(new ReceiverHelper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +290,6 @@ void
|
|||||||
ServerLobbyThread::Main()
|
ServerLobbyThread::Main()
|
||||||
{
|
{
|
||||||
GetSender().Run();
|
GetSender().Run();
|
||||||
for_each(m_avatarSenderThreadPool.begin(), m_avatarSenderThreadPool.end(), boost::mem_fn(&SenderThread::Run));
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -326,10 +321,8 @@ ServerLobbyThread::Main()
|
|||||||
TerminateGames();
|
TerminateGames();
|
||||||
|
|
||||||
GetSender().SignalTermination();
|
GetSender().SignalTermination();
|
||||||
for_each(m_avatarSenderThreadPool.begin(), m_avatarSenderThreadPool.end(), boost::mem_fn(&SenderThread::SignalTermination));
|
|
||||||
|
|
||||||
GetSender().Join(SENDER_THREAD_TERMINATE_TIMEOUT);
|
GetSender().Join(SENDER_THREAD_TERMINATE_TIMEOUT);
|
||||||
for_each(m_avatarSenderThreadPool.begin(), m_avatarSenderThreadPool.end(), boost::bind(&SenderThread::Join, _1, SENDER_THREAD_TERMINATE_TIMEOUT));
|
|
||||||
|
|
||||||
CleanupConnectQueue();
|
CleanupConnectQueue();
|
||||||
}
|
}
|
||||||
@@ -590,11 +583,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const N
|
|||||||
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets) == 0)
|
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets) == 0)
|
||||||
{
|
{
|
||||||
avatarFound = true;
|
avatarFound = true;
|
||||||
SenderThreadList::iterator pos = min_element(m_avatarSenderThreadPool.begin(), m_avatarSenderThreadPool.end(), *boost::lambda::_1 < *boost::lambda::_2);
|
GetSender().Send(session.sessionData, tmpPackets);
|
||||||
if (pos != m_avatarSenderThreadPool.end())
|
|
||||||
(*pos)->Send(session.sessionData, tmpPackets);
|
|
||||||
else
|
|
||||||
LOG_ERROR("Load balancing for avatar sender threads failed.");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LOG_ERROR("Failed to read avatar file for network transmission.");
|
LOG_ERROR("Failed to read avatar file for network transmission.");
|
||||||
|
|||||||
@@ -177,7 +177,6 @@ private:
|
|||||||
|
|
||||||
boost::shared_ptr<ReceiverHelper> m_receiver;
|
boost::shared_ptr<ReceiverHelper> m_receiver;
|
||||||
boost::shared_ptr<SenderThread> m_sender;
|
boost::shared_ptr<SenderThread> m_sender;
|
||||||
SenderThreadList m_avatarSenderThreadPool;
|
|
||||||
boost::shared_ptr<ServerSenderCallback> m_senderCallback;
|
boost::shared_ptr<ServerSenderCallback> m_senderCallback;
|
||||||
GuiInterface &m_gui;
|
GuiInterface &m_gui;
|
||||||
AvatarManager &m_avatarManager;
|
AvatarManager &m_avatarManager;
|
||||||
|
|||||||
Reference in New Issue
Block a user