1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 02:57:45 +00:00

Decouple packet handling;

This commit is contained in:
Maru 2017-12-07 13:17:15 -02:00
parent 899f0fa272
commit 5b58e5a6e2
4 changed files with 31 additions and 25 deletions

View file

@ -4,6 +4,7 @@
#include <Server_Common/Network/PacketDef/Ipcs.h>
#include <Server_Common/Network/PacketDef/Zone/ServerZoneDef.h>
#include <src/servers/Server_Common/Logging/Logger.h>
#include <Server_Zone/Actor/Actor.h>
#include <Server_Zone/Actor/Player.h>
#include <Server_Zone/ServerZone.h>
@ -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;
@ -31,25 +33,3 @@ 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;
}

View file

@ -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;

View file

@ -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;

View file

@ -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 );