1
This commit is contained in:
parent
ec2e2b949f
commit
387fa32e65
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
#include "chatmgr.h"
|
#include "chatmgr.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "playermgr.h"
|
||||||
|
#include "guild.h"
|
||||||
|
#include "guildmgr.h"
|
||||||
|
|
||||||
void ChatMgr::Init()
|
void ChatMgr::Init()
|
||||||
{
|
{
|
||||||
@ -54,12 +57,12 @@ void ChatMgr::ProcWorldChat(Player* hum, const cs::CMSendChatMsg& msg)
|
|||||||
|
|
||||||
world_msgrec_.curr_id = world_msg_id_;
|
world_msgrec_.curr_id = world_msg_id_;
|
||||||
world_msgrec_.msg_list.push_back(p);
|
world_msgrec_.msg_list.push_back(p);
|
||||||
if (hum->chat_channel == kCCWorld) {
|
world_msgrec_.PopAndDelete(50);
|
||||||
cs::SMChatMsgNotify notifymsg;
|
PlayerMgr::Instance()->TraversePlayer
|
||||||
hum->SendMsg(notifymsg);
|
([](Player* hum)
|
||||||
} else {
|
{
|
||||||
hum->MarkNewMsg();
|
ChatMgr::Instance()->SyncWorldChatMsg(hum);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatMgr::ProcPrivateChat(Player* hum, const cs::CMSendChatMsg& msg)
|
void ChatMgr::ProcPrivateChat(Player* hum, const cs::CMSendChatMsg& msg)
|
||||||
@ -69,6 +72,11 @@ void ChatMgr::ProcPrivateChat(Player* hum, const cs::CMSendChatMsg& msg)
|
|||||||
cs::MFChatMsg* p = new cs::MFChatMsg();
|
cs::MFChatMsg* p = new cs::MFChatMsg();
|
||||||
p->set_msg_uuid(private_msg_id_);
|
p->set_msg_uuid(private_msg_id_);
|
||||||
|
|
||||||
|
ChatMgr::Instance()->SyncPrivateChatMsg(hum);
|
||||||
|
Player* target_hum = PlayerMgr::Instance()->GetPlayerByAccountId(msg.target());
|
||||||
|
if (target_hum) {
|
||||||
|
ChatMgr::Instance()->SyncPrivateChatMsg(target_hum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatMgr::ProcGuildChat(Player* hum, const cs::CMSendChatMsg& msg)
|
void ChatMgr::ProcGuildChat(Player* hum, const cs::CMSendChatMsg& msg)
|
||||||
@ -77,6 +85,20 @@ void ChatMgr::ProcGuildChat(Player* hum, const cs::CMSendChatMsg& msg)
|
|||||||
|
|
||||||
cs::MFChatMsg* p = new cs::MFChatMsg();
|
cs::MFChatMsg* p = new cs::MFChatMsg();
|
||||||
p->set_msg_uuid(guild_msg_id_);
|
p->set_msg_uuid(guild_msg_id_);
|
||||||
|
|
||||||
|
Guild* guild = GuildMgr::Instance()->GetGuild(hum->GuildId());
|
||||||
|
if (guild) {
|
||||||
|
guild->TraverseMember
|
||||||
|
(
|
||||||
|
[] (GuildMember* member)
|
||||||
|
{
|
||||||
|
Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(member->account_id);
|
||||||
|
if (hum) {
|
||||||
|
ChatMgr::Instance()->SyncGuildChatMsg(hum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatedUserRec* ChatMgr::GetChatedUser(const std::string& account_id)
|
ChatedUserRec* ChatMgr::GetChatedUser(const std::string& account_id)
|
||||||
@ -84,3 +106,41 @@ ChatedUserRec* ChatMgr::GetChatedUser(const std::string& account_id)
|
|||||||
auto itr = private_chated_users_.find(account_id);
|
auto itr = private_chated_users_.find(account_id);
|
||||||
return itr != private_chated_users_.end() ? &itr->second : nullptr;
|
return itr != private_chated_users_.end() ? &itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatMgr::SyncWorldChatMsg(Player* hum)
|
||||||
|
{
|
||||||
|
if (hum->chat_channel == kCCWorld) {
|
||||||
|
cs::SMChatMsgNotify notifymsg;
|
||||||
|
for (cs::MFChatMsg* chat_msg : world_msgrec_.msg_list) {
|
||||||
|
if (chat_msg->msg_uuid() > hum->world_channel_last_id) {
|
||||||
|
*notifymsg.add_msg_list() = *chat_msg;
|
||||||
|
hum->world_channel_last_id = chat_msg->msg_uuid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hum->SendMsg(notifymsg);
|
||||||
|
} else {
|
||||||
|
hum->MarkNewMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatMgr::SyncPrivateChatMsg(Player* hum)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatMgr::SyncGuildChatMsg(Player* hum)
|
||||||
|
{
|
||||||
|
if (hum->GuildId() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto itr = guild_msgrec_.find(hum->GuildId());
|
||||||
|
if (itr != guild_msgrec_.end()) {
|
||||||
|
if (hum->chat_channel == kCCGuild) {
|
||||||
|
if (itr->second.curr_id > hum->guild_channel_last_id) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hum->MarkNewMsg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -8,6 +8,17 @@ struct ChatMsgRec
|
|||||||
long long curr_id = 0;
|
long long curr_id = 0;
|
||||||
long long last_id = 0;
|
long long last_id = 0;
|
||||||
std::list<cs::MFChatMsg*> msg_list;
|
std::list<cs::MFChatMsg*> msg_list;
|
||||||
|
|
||||||
|
void Pop(int max_num)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PopAndDelete(int max_num)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ChatedUserRec
|
struct ChatedUserRec
|
||||||
@ -36,6 +47,9 @@ class ChatMgr : public a8::Singleton<ChatMgr>
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
ChatedUserRec* GetChatedUser(const std::string& account_id);
|
ChatedUserRec* GetChatedUser(const std::string& account_id);
|
||||||
|
void SyncWorldChatMsg(Player* hum);
|
||||||
|
void SyncPrivateChatMsg(Player* hum);
|
||||||
|
void SyncGuildChatMsg(Player* hum);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
long long private_msg_id_ = 1000;
|
long long private_msg_id_ = 1000;
|
||||||
|
@ -1145,6 +1145,13 @@ void Guild::SyncNewApply()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Guild::TraverseMember(std::function<void (GuildMember*)> callback)
|
||||||
|
{
|
||||||
|
for (auto& pair : member_hash_) {
|
||||||
|
callback(pair.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int Guild::GetJobMemberNum(int job)
|
int Guild::GetJobMemberNum(int job)
|
||||||
{
|
{
|
||||||
std::set<std::string>* members = GetJobMembers(job);
|
std::set<std::string>* members = GetJobMembers(job);
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
bool CheckRedPoint();
|
bool CheckRedPoint();
|
||||||
bool HasApply();
|
bool HasApply();
|
||||||
void SyncNewApply();
|
void SyncNewApply();
|
||||||
|
void TraverseMember(std::function<void (GuildMember*)> callback);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool IsFull();
|
bool IsFull();
|
||||||
|
@ -353,6 +353,13 @@ void PlayerMgr::Update(long long tick)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerMgr::TraversePlayer(std::function<void (Player*)> callback)
|
||||||
|
{
|
||||||
|
for (auto& pair : accountid_hash_) {
|
||||||
|
callback(pair.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Player* PlayerMgr::GetPlayerBySocket(int socket)
|
Player* PlayerMgr::GetPlayerBySocket(int socket)
|
||||||
{
|
{
|
||||||
auto itr = socket_hash_.find(socket);
|
auto itr = socket_hash_.find(socket);
|
||||||
|
@ -81,6 +81,7 @@ class PlayerMgr : public a8::Singleton<PlayerMgr>
|
|||||||
int OnlineNum();
|
int OnlineNum();
|
||||||
int WatchPlayerNum();
|
int WatchPlayerNum();
|
||||||
void Update(long long tick);
|
void Update(long long tick);
|
||||||
|
void TraversePlayer(std::function<void (Player*)> callback);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnClientDisconnect(a8::XParams& param);
|
void OnClientDisconnect(a8::XParams& param);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user