Finally: User supplied avatars are transfered! They are stored on the server and clients request them if needed. Make sure the server has write access to the cache dir to make it work.

This commit is contained in:
lotodore
2007-10-07 18:46:40 +00:00
parent 639df29bdc
commit d16312111f
7 changed files with 123 additions and 1 deletions
+26 -1
View File
@@ -169,6 +169,13 @@ ServerLobbyThread::HandleGameRetrievePlayerInfo(SessionWrapper session, const Ne
HandleNetPacketRetrievePlayerInfo(session, tmpPacket);
}
void
ServerLobbyThread::HandleGameRetrieveAvatar(SessionWrapper session, const NetPacketRetrieveAvatar &tmpPacket)
{
// Someone within a game requested an avatar.
HandleNetPacketRetrieveAvatar(session, tmpPacket);
}
void
ServerLobbyThread::RemoveGame(unsigned id)
{
@@ -295,6 +302,8 @@ ServerLobbyThread::ProcessLoop()
{
if (packet->ToNetPacketRetrievePlayerInfo())
HandleNetPacketRetrievePlayerInfo(session, *packet->ToNetPacketRetrievePlayerInfo());
else if (packet->ToNetPacketRetrieveAvatar())
HandleNetPacketRetrieveAvatar(session, *packet->ToNetPacketRetrieveAvatar());
else if (packet->ToNetPacketCreateGame())
HandleNetPacketCreateGame(session, *packet->ToNetPacketCreateGame());
else if (packet->ToNetPacketJoinGame())
@@ -356,7 +365,7 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const NetPacketIn
m_sessionManager.SetSessionPlayerData(session.sessionData->GetSocket(), tmpPlayerData);
session.playerData = tmpPlayerData;
if (!GetAvatarManager().HasAvatar(initData.avatar))
if (initData.showAvatar && !GetAvatarManager().HasAvatar(initData.avatar))
RequestPlayerAvatar(session);
else
EstablishSession(session);
@@ -416,6 +425,7 @@ ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, const NetPac
if (avatarSize == tmpAvatar->reportedSize)
{
GetAvatarManager().StoreAvatarInCache(avatarMD5, tmpAvatar->fileType, &tmpAvatar->fileData[0], avatarSize);
// TODO log error
// Free memory.
session.playerData->SetNetAvatarData(boost::shared_ptr<AvatarData>());
// Init finished - start session.
@@ -454,6 +464,21 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
// TODO: handle error
}
void
ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const NetPacketRetrieveAvatar &tmpPacket)
{
NetPacketRetrieveAvatar::Data request;
tmpPacket.GetData(request);
string tmpFile;
if (GetAvatarManager().GetAvatarFileName(request.avatar, tmpFile))
{
NetPacketList tmpPackets;
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets))
GetSender().SendLowPrio(session.sessionData->GetSocket(), tmpPackets);
}
}
void
ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const NetPacketCreateGame &tmpPacket)
{