This commit is contained in:
aozhiwei 2020-12-13 14:22:15 +08:00
parent a166d00686
commit 6de8c854a1
2 changed files with 31 additions and 2 deletions

View File

@ -1,5 +1,7 @@
#include "precompile.h"
#include <a8/timer.h>
#include "chatmgr.h"
#include "player.h"
#include "playermgr.h"
@ -15,6 +17,14 @@ struct ChatedUserRec
std::map<std::string, ChatMsgRec> users;
};
ChatMsgRec::~ChatMsgRec()
{
for (cs::MFChatMsg* msg : msg_list) {
delete msg;
}
msg_list.clear();
}
void ChatMsgRec::Pop(size_t max_num)
{
while (msg_list.size() > max_num) {
@ -307,7 +317,16 @@ void ChatMgr::OnPlayerOnline(Player* hum)
void ChatMgr::OnPlayerOffline(Player* hum)
{
a8::Timer::Instance()->AddDeadLineTimer
(1000 * 60 * 5,
a8::XParams()
.SetSender(hum->AccountId()),
[] (const a8::XParams& param)
{
if (!PlayerMgr::Instance()->GetPlayerByAccountId(param.sender)) {
ChatMgr::Instance()->RemoveChatedUser(param.sender);
}
});
}
void ChatMgr::AddChatedUser(const std::string& sender_id, const std::string& receiver_id,
@ -349,3 +368,12 @@ void ChatMgr::FillMFChatMsg(cs::MFChatMsg* msg, Player* sender, long long msg_uu
msg->set_msg_body(msg_body);
msg->set_send_time(time(nullptr));
}
void ChatMgr::RemoveChatedUser(const std::string& account_id)
{
auto itr = private_chated_users_.find(account_id);
if (itr != private_chated_users_.end()) {
delete itr->second;
private_chated_users_.erase(account_id);
}
}

View File

@ -4,11 +4,11 @@
struct ChatMsgRec
{
long long curr_id = 0;
long long last_id = 0;
std::list<cs::MFChatMsg*> msg_list;
~ChatMsgRec();
void Pop(size_t max_num);
void PopAndDelete(size_t max_num);
};
@ -48,6 +48,7 @@ class ChatMgr : public a8::Singleton<ChatMgr>
cs::MFChatMsg* chat_msg, long long last_id);
void FillMFChatMsg(cs::MFChatMsg* msg, Player* sender, long long msg_uuid,
int chat_channel, int msg_type, const std::string& msg_body);
void RemoveChatedUser(const std::string& account_id);
private:
long long world_msg_id_ = 1000;