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:
lotodore
2007-11-22 17:56:49 +00:00
parent 65a3f969bf
commit 6489f28e93
2 changed files with 1 additions and 13 deletions
+1 -12
View File
@@ -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.");
-1
View File
@@ -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;