From 5b58e5a6e28a65d5a82f13a6f701c8ff71375be5 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 13:17:15 -0200 Subject: [PATCH] Decouple packet handling; --- .../Server_Zone/Actor/Group/FriendList.cpp | 26 +++---------------- src/servers/Server_Zone/Actor/Group/Group.cpp | 5 ++++ src/servers/Server_Zone/Actor/Group/Group.h | 6 ++++- .../Network/Handlers/PacketHandlers.cpp | 19 +++++++++++++- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Group/FriendList.cpp index d08bc94b..5ceb720d 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Group/FriendList.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -11,6 +12,7 @@ #include "FriendList.h" extern Core::ServerZone g_serverZone; +extern Core::Logger g_log; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; @@ -30,26 +32,4 @@ std::vector< PlayerEntry > Core::Entity::Group::FriendList::getFriendListEntries } return entryList; -} - -//todo: make this function generic for all groups, and override if needed? -Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generateFriendsListPacket( PlayerPtr pPlayer ) -{ - ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); - listPacket.data().type = 0x0B; - listPacket.data().sequence = 10; - memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); - - uint16_t i = 0; - - for ( const auto& member : m_members ) - { - if ( i == 10 ) - break; - - listPacket.data().entries[i] = generatePlayerEntry( member.second ); - i++; - } - - return listPacket; -} +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 26cdd7e3..3be65ecf 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -113,6 +113,11 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem return entry; } +std::map< uint64_t, GroupMember > Group::getMembers() const +{ + return m_members; +} + uint32_t Group::getCapacity() const { return m_maxCapacity; diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index 1b25d2f4..527e68f7 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -59,7 +59,11 @@ public: virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); /*! generates a player entry used for lists (social, etc) */ - Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember ); + static Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember ); + + /*! access GroupMember vector */ + + std::map< uint64_t, GroupMember > getMembers() const; /*! get container limit */ uint32_t getCapacity() const; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index e603a996..7962ec8f 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -452,7 +452,24 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket else if( type == SocialListType::FriendList ) { // friend list - ZoneChannelPacket< FFXIVIpcSocialList > listPacket = pPlayer->getFriendsList()->generateFriendsListPacket( pPlayer ); + ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); + listPacket.data().type = 0x0B; + listPacket.data().sequence = 10; + memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); + + uint16_t i = 0; + + g_log.debug( std::to_string( pPlayer->getFriendsList()->getMembers().size() ) ); + + for ( auto member : pPlayer->getFriendsList()->getMembers() ) + { + if ( i == 10 ) + break; + + g_log.debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); + listPacket.data().entries[i] = Core::Entity::Group::Group::generatePlayerEntry( member.second ); + i++; + } queueOutPacket( listPacket );