Adding an additional exception handler to the receive callback.

This commit is contained in:
lotodore
2009-07-21 21:40:24 +00:00
parent 670166677e
commit cac09280a0
+19 -13
View File
@@ -522,6 +522,8 @@ ServerLobbyThread::CancelTimers()
void void
ServerLobbyThread::HandleRead(const boost::system::error_code &ec, SessionId sessionId, size_t bytesRead) ServerLobbyThread::HandleRead(const boost::system::error_code &ec, SessionId sessionId, size_t bytesRead)
{
try
{ {
// Find the session. // Find the session.
SessionWrapper session = m_sessionManager.GetSessionById(sessionId); SessionWrapper session = m_sessionManager.GetSessionById(sessionId);
@@ -581,6 +583,10 @@ ServerLobbyThread::HandleRead(const boost::system::error_code &ec, SessionId ses
CloseSession(session); CloseSession(session);
} }
} }
} catch (...)
{
LOG_ERROR("Session " << sessionId << " - unknown exception in HandleRead.");
}
} }
void void
@@ -737,13 +743,13 @@ ServerLobbyThread::HandleNetPacketAvatarHeader(SessionWrapper session, const Net
if (headerData.avatarFileSize >= MIN_AVATAR_FILE_SIZE && headerData.avatarFileSize <= MAX_AVATAR_FILE_SIZE) if (headerData.avatarFileSize >= MIN_AVATAR_FILE_SIZE && headerData.avatarFileSize <= MAX_AVATAR_FILE_SIZE)
{ {
boost::shared_ptr<AvatarData> tmpAvatarData(new AvatarData); boost::shared_ptr<AvatarFile> tmpAvatarFile(new AvatarFile);
tmpAvatarData->fileData.reserve(headerData.avatarFileSize); tmpAvatarFile->fileData.reserve(headerData.avatarFileSize);
tmpAvatarData->fileType = headerData.avatarFileType; tmpAvatarFile->fileType = headerData.avatarFileType;
tmpAvatarData->reportedSize = headerData.avatarFileSize; tmpAvatarFile->reportedSize = headerData.avatarFileSize;
// Ignore request id for now. // Ignore request id for now.
session.playerData->SetNetAvatarData(tmpAvatarData); session.playerData->SetNetAvatarFile(tmpAvatarFile);
// Session is now receiving an avatar. // Session is now receiving an avatar.
session.sessionData->SetState(SessionData::ReceivingAvatar); session.sessionData->SetState(SessionData::ReceivingAvatar);
@@ -759,7 +765,7 @@ ServerLobbyThread::HandleNetPacketUnknownAvatar(SessionWrapper session, const Ne
if (session.playerData.get()) if (session.playerData.get())
{ {
// Free memory (just in case). // Free memory (just in case).
session.playerData->SetNetAvatarData(boost::shared_ptr<AvatarData>()); session.playerData->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
session.playerData->SetAvatarMD5(MD5Buf()); session.playerData->SetAvatarMD5(MD5Buf());
// Start session. // Start session.
EstablishSession(session); EstablishSession(session);
@@ -774,7 +780,7 @@ ServerLobbyThread::HandleNetPacketAvatarFile(SessionWrapper session, const NetPa
NetPacketAvatarFile::Data data; NetPacketAvatarFile::Data data;
tmpPacket.GetData(data); tmpPacket.GetData(data);
boost::shared_ptr<AvatarData> tmpAvatar = session.playerData->GetNetAvatarData(); boost::shared_ptr<AvatarFile> tmpAvatar = session.playerData->GetNetAvatarFile();
if (tmpAvatar.get() && tmpAvatar->fileData.size() + data.fileData.size() <= tmpAvatar->reportedSize) if (tmpAvatar.get() && tmpAvatar->fileData.size() + data.fileData.size() <= tmpAvatar->reportedSize)
{ {
std::copy(data.fileData.begin(), data.fileData.end(), back_inserter(tmpAvatar->fileData)); std::copy(data.fileData.begin(), data.fileData.end(), back_inserter(tmpAvatar->fileData));
@@ -787,7 +793,7 @@ ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, const NetPac
{ {
if (session.playerData.get()) if (session.playerData.get())
{ {
boost::shared_ptr<AvatarData> tmpAvatar = session.playerData->GetNetAvatarData(); boost::shared_ptr<AvatarFile> tmpAvatar = session.playerData->GetNetAvatarFile();
MD5Buf avatarMD5 = session.playerData->GetAvatarMD5(); MD5Buf avatarMD5 = session.playerData->GetAvatarMD5();
if (!avatarMD5.IsZero() && tmpAvatar.get()) if (!avatarMD5.IsZero() && tmpAvatar.get())
{ {
@@ -801,7 +807,7 @@ ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, const NetPac
} }
// Free memory. // Free memory.
session.playerData->SetNetAvatarData(boost::shared_ptr<AvatarData>()); session.playerData->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
// Set avatar file name. // Set avatar file name.
string avatarFileName; string avatarFileName;
if (GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName)) if (GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName))
@@ -988,10 +994,10 @@ ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session)
} }
// Ask the client to send its avatar. // Ask the client to send its avatar.
boost::shared_ptr<NetPacket> retrieveAvatar(new NetPacketRetrieveAvatar); boost::shared_ptr<NetPacket> retrieveAvatar(new NetPacketRetrieveAvatar);
NetPacketRetrieveAvatar::Data retrieveAvatarData; NetPacketRetrieveAvatar::Data retrieveAvatarFile;
retrieveAvatarData.requestId = session.playerData->GetUniqueId(); retrieveAvatarFile.requestId = session.playerData->GetUniqueId();
retrieveAvatarData.avatar = session.playerData->GetAvatarMD5(); retrieveAvatarFile.avatar = session.playerData->GetAvatarMD5();
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData); static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarFile);
GetSender().Send(session.sessionData, retrieveAvatar); GetSender().Send(session.sessionData, retrieveAvatar);
} }