From 434b483ef516e17cfd10b903f8a487d32962e307 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Tue, 21 Nov 2017 17:01:05 +0000 Subject: [PATCH] stub some group manager stuff --- src/servers/Server_Zone/Actor/Group/Group.cpp | 34 +++++++++++-- src/servers/Server_Zone/Actor/Group/Group.h | 34 +++++++------ .../Actor/Group/Manager/GroupMgr.cpp | 22 +++++++++ .../Actor/Group/Manager/GroupMgr.h | 48 +++++++++++++++++++ 4 files changed, 118 insertions(+), 20 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 3751e3dc..5a55bc77 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -48,7 +48,6 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla member.role = 0; member.pPlayer = pRecipient; m_members.emplace( recipientId, member ); - reload(); } else { @@ -72,12 +71,37 @@ void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::Ga } } -void Core::Entity::Group::Group::reload() +bool Core::Entity::Group::Group::isParty() const { - m_reloadGroup = true; + return m_type == GroupType::Party; } -bool Core::Entity::Group::Group::canReload() const +bool Core::Entity::Group::Group::isFriendList() const { - return m_reloadGroup; + return m_type == GroupType::FriendList; } + +bool Core::Entity::Group::Group::isFreeCompany() const +{ + return m_type == GroupType::FreeCompany; +} + +bool Core::Entity::Group::Group::isLinkshell() const +{ + return m_type == GroupType::Linkshell; +} + +bool Core::Entity::Group::Group::isFreeCompanyPetition() const +{ + return m_type == GroupType::FreeCompanyPetition; +} + +bool Core::Entity::Group::Group::isBlacklist() const +{ + return m_type == GroupType::Blacklist; +} + +bool Core::Entity::Group::Group::isContentGroup() const +{ + return m_type == GroupType::ContentGroup; +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index ee4c4476..6e4d5e1c 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -13,6 +13,9 @@ namespace Core { namespace Entity { namespace Group { +class Group; +using GroupPtr = boost::shared_ptr< Group >; + struct GroupMember { uint64_t inviterId; @@ -24,7 +27,7 @@ enum class GroupType : uint8_t { None, Party, - Friends, + FriendList, FreeCompany, Linkshell, @@ -44,19 +47,7 @@ private: time_point m_createTime{ std::chrono::steady_clock::now() }; std::map< uint64_t, GroupMember > m_members; std::map< uint64_t, uint64_t > m_invites; // - bool m_reloadGroup; - void addMember( uint64_t senderId = 0, uint64_t recipientId = 0 ); - void inviteMember( uint64_t senderId, uint64_t recipientId = 0 ); - void removeMember( uint64_t id = 0 ); -public: - Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; - ~Group(){}; - - virtual void load() = 0; - virtual void update() = 0; - virtual void disband() = 0; virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); @@ -64,8 +55,21 @@ public: virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); - void reload(); - bool canReload() const; + virtual void load(); + virtual void update(); + virtual void disband(); +public: + Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; + ~Group(){}; + + bool isParty() const; + bool isFriendList() const; + bool isFreeCompany() const; + bool isLinkshell() const; + bool isFreeCompanyPetition() const; + bool isBlacklist() const; + bool isContentGroup() const; }; } diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp index e69de29b..ec4bc16a 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp @@ -0,0 +1,22 @@ +#include "../Group.h" +#include "GroupMgr.h" + +Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const +{ + auto it = m_invites.find( playerId ); + if( it != m_invites.end() ) + { + return findGroupById( it->second ); + } + return nullptr; +} + +Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupById( uint64_t groupId ) const +{ + auto it = m_groups.find( groupId ); + if( it != m_groups.end() ) + { + return it->second; + } + return nullptr; +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h index e69de29b..0c55a446 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h @@ -0,0 +1,48 @@ +#ifndef _GROUPMGR_H +#define _GROUPMGR_H + +#include +#include + +#include +#include +#include + +namespace Core { +namespace Entity { +namespace Group { + +class GroupMgr : public boost::enable_shared_from_this< GroupMgr > +{ +private: + GroupType m_type{ GroupType::None }; + uint64_t m_groupCount{ 0 }; + uint32_t m_maxEntries{ 0xFFFFFFFF }; + std::map< uint64_t, GroupPtr > m_groups; + std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > + virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; + + /* + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + friend virtual void load(); + friend virtual void update(); + friend virtual void disband(); + //*/ +public: + GroupMgr( GroupType type, uint32_t maxEntries ) : + m_type( type ), m_maxEntries( maxEntries ){}; + ~GroupMgr(){}; + + GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + GroupPtr findGroupById( uint64_t groupId ) const; +}; + +} +} +}; +#endif /* ! _GROUPMGR_H */ \ No newline at end of file