添加序列化处理group friend
This commit is contained in:
parent
7e0aec0938
commit
ddd0dffd5b
@ -1,6 +1,12 @@
|
|||||||
#include "precompile.h"
|
#include "precompile.h"
|
||||||
|
|
||||||
|
#include <a8/timer.h>
|
||||||
|
|
||||||
#include "group.h"
|
#include "group.h"
|
||||||
|
#include "cs_proto.pb.h"
|
||||||
|
#include "ss_proto.pb.h"
|
||||||
|
#include "dbengine.h"
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
void Group::Init()
|
void Group::Init()
|
||||||
{
|
{
|
||||||
@ -9,7 +15,10 @@ void Group::Init()
|
|||||||
|
|
||||||
void Group::UnInit()
|
void Group::UnInit()
|
||||||
{
|
{
|
||||||
|
for (auto& pair : member_hash_) {
|
||||||
|
delete pair.second;
|
||||||
|
}
|
||||||
|
member_hash_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
GroupMember* Group::GetMember(const std::string& account_id)
|
GroupMember* Group::GetMember(const std::string& account_id)
|
||||||
@ -25,7 +34,8 @@ bool Group::IsFull()
|
|||||||
|
|
||||||
void Group::Rename(const std::string& new_group_name)
|
void Group::Rename(const std::string& new_group_name)
|
||||||
{
|
{
|
||||||
|
group_name = new_group_name;
|
||||||
|
MarkDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::AddMember(GroupMember* member)
|
void Group::AddMember(GroupMember* member)
|
||||||
@ -34,6 +44,11 @@ void Group::AddMember(GroupMember* member)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
member_hash_[member->account_id] = member;
|
member_hash_[member->account_id] = member;
|
||||||
|
|
||||||
|
MarkDirty();
|
||||||
|
if (dirty_timer_) {
|
||||||
|
a8::Timer::Instance()->ModifyTimer(dirty_timer_, 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::RemoveMember(const std::string& account_id)
|
void Group::RemoveMember(const std::string& account_id)
|
||||||
@ -42,9 +57,86 @@ void Group::RemoveMember(const std::string& account_id)
|
|||||||
if (member) {
|
if (member) {
|
||||||
member_hash_.erase(account_id);
|
member_hash_.erase(account_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MarkDirty();
|
||||||
|
if (dirty_timer_) {
|
||||||
|
a8::Timer::Instance()->ModifyTimer(dirty_timer_, 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::MakrDirty()
|
void Group::MarkDirty()
|
||||||
|
{
|
||||||
|
if (!dirty_) {
|
||||||
|
dirty_ = true;
|
||||||
|
dirty_timer_ = a8::Timer::Instance()->
|
||||||
|
AddDeadLineTimerAndAttach(1000 * 60,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender((void*)this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Group* group = (Group*)param.sender.GetUserData();
|
||||||
|
group->SaveToDB();
|
||||||
|
},
|
||||||
|
&timer_attacher.timer_list_,
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Group* group = (Group*)param.sender.GetUserData();
|
||||||
|
group->dirty_timer_ = nullptr;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Group::FillGroupDB(cs::MFGroupDB& group_dto)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Group::SaveToDB()
|
||||||
|
{
|
||||||
|
cs::MFGroupDB group_db;
|
||||||
|
FillGroupDB(group_db);
|
||||||
|
std::string group_data;
|
||||||
|
group_db.SerializeToString(&group_data);
|
||||||
|
|
||||||
|
auto on_ok =
|
||||||
|
[] (a8::XParams& param, const f8::DataSet* data_set)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
auto on_error =
|
||||||
|
[] (a8::XParams& param, int error_code, const std::string& error_msg)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(group_id);
|
||||||
|
DBEngine::Instance()->
|
||||||
|
ExecAsyncScript(
|
||||||
|
conn_info,
|
||||||
|
"INSERT `group`(group_id, group_name, owner_id, creator_id, group_data "
|
||||||
|
" createtime, modifytime) "
|
||||||
|
"VALUES(%d, '%s', %d, %d, '%s', %d, %d) "
|
||||||
|
"ON DUPLICATE KEY UPDATE group_name='%s', owner_id=%d, creator_id=%d, "
|
||||||
|
" group_data='%s', modifytime=%d;",
|
||||||
|
{
|
||||||
|
group_id,
|
||||||
|
group_name,
|
||||||
|
owner_id,
|
||||||
|
creator_id,
|
||||||
|
group_data,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
|
||||||
|
group_name,
|
||||||
|
owner_id,
|
||||||
|
creator_id,
|
||||||
|
group_data,
|
||||||
|
App::Instance()->nowtime
|
||||||
|
},
|
||||||
|
a8::XParams(),
|
||||||
|
on_ok,
|
||||||
|
on_error,
|
||||||
|
group_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <a8/timer_attacher.h>
|
||||||
|
|
||||||
struct GroupMember
|
struct GroupMember
|
||||||
{
|
{
|
||||||
std::string account_id;
|
std::string account_id;
|
||||||
@ -11,6 +13,12 @@ struct GroupMember
|
|||||||
int data_version1 = 0;
|
int data_version1 = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace cs
|
||||||
|
{
|
||||||
|
class MFGroupDB;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct timer_list;
|
||||||
class Group
|
class Group
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -19,6 +27,7 @@ class Group
|
|||||||
std::string owner_id;
|
std::string owner_id;
|
||||||
std::string creator_id;
|
std::string creator_id;
|
||||||
int createtime = 0;
|
int createtime = 0;
|
||||||
|
a8::TimerAttacher timer_attacher;
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void UnInit();
|
void UnInit();
|
||||||
@ -28,8 +37,14 @@ class Group
|
|||||||
GroupMember* GetMember(const std::string& account_id);
|
GroupMember* GetMember(const std::string& account_id);
|
||||||
void AddMember(GroupMember* member);
|
void AddMember(GroupMember* member);
|
||||||
void RemoveMember(const std::string& account_id);
|
void RemoveMember(const std::string& account_id);
|
||||||
void MakrDirty();
|
void MarkDirty();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void FillGroupDB(cs::MFGroupDB& group_dto);
|
||||||
|
void SaveToDB();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool dirty_ = false;
|
||||||
|
timer_list* dirty_timer_ = nullptr;
|
||||||
std::map<std::string, GroupMember*> member_hash_;
|
std::map<std::string, GroupMember*> member_hash_;
|
||||||
};
|
};
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "playermgr.h"
|
#include "playermgr.h"
|
||||||
#include "dbengine.h"
|
#include "dbengine.h"
|
||||||
#include "app.h"
|
|
||||||
#include "MSConnMgr.h"
|
#include "MSConnMgr.h"
|
||||||
|
#include "dbengine.h"
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
void Player::Init()
|
void Player::Init()
|
||||||
{
|
{
|
||||||
@ -203,3 +204,49 @@ void Player::ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code)
|
|||||||
}
|
}
|
||||||
MSConnMgr::Instance()->SendMsg(msg, hash_code);
|
MSConnMgr::Instance()->SendMsg(msg, hash_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::FillFriendDB(cs::MFFriendDB& friend_db)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::SaveToDB()
|
||||||
|
{
|
||||||
|
cs::MFFriendDB friend_db;
|
||||||
|
FillFriendDB(friend_db);
|
||||||
|
std::string friend_data;
|
||||||
|
friend_db.SerializeToString(&friend_data);
|
||||||
|
|
||||||
|
auto on_ok =
|
||||||
|
[] (a8::XParams& param, const f8::DataSet* data_set)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
auto on_error =
|
||||||
|
[] (a8::XParams& param, int error_code, const std::string& error_msg)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code);
|
||||||
|
DBEngine::Instance()->
|
||||||
|
ExecAsyncScript(
|
||||||
|
conn_info,
|
||||||
|
"INSERT `friend`(account_id, friend_data, createtime, modifytime) "
|
||||||
|
"VALUES('%s', '%s', %d, %d) "
|
||||||
|
"ON DUPLICATE KEY UPDATE friend_data='%s', modifytime=%d; ",
|
||||||
|
{
|
||||||
|
account_id,
|
||||||
|
friend_data,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
|
||||||
|
friend_data,
|
||||||
|
App::Instance()->nowtime
|
||||||
|
},
|
||||||
|
a8::XParams(),
|
||||||
|
on_ok,
|
||||||
|
on_error,
|
||||||
|
crc32_code
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "ss_proto.pb.h"
|
#include "ss_proto.pb.h"
|
||||||
#include "WSListener.h"
|
#include "WSListener.h"
|
||||||
|
|
||||||
|
struct timer_list;
|
||||||
class Player
|
class Player
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -50,14 +51,20 @@ class Player
|
|||||||
void SyncLocToMasterServer();
|
void SyncLocToMasterServer();
|
||||||
void NotifyOnline();
|
void NotifyOnline();
|
||||||
void NotifyOffline();
|
void NotifyOffline();
|
||||||
|
void MarkDirty();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void AsyncGetFriendList();
|
void AsyncGetFriendList();
|
||||||
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
||||||
void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext);
|
void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext);
|
||||||
void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
||||||
|
void FillFriendDB(cs::MFFriendDB& friend_db);
|
||||||
|
void SaveToDB();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool dirty_ = false;
|
||||||
|
timer_list* dirty_timer_ = nullptr;
|
||||||
|
|
||||||
std::map<std::string, Friend> friend_hash_;
|
std::map<std::string, Friend> friend_hash_;
|
||||||
bool reading_friends_list_ = false;
|
bool reading_friends_list_ = false;
|
||||||
bool friend_list_syncok_ = false;
|
bool friend_list_syncok_ = false;
|
||||||
|
@ -24,6 +24,26 @@ message MFUserInfo
|
|||||||
optional int32 online = 5;
|
optional int32 online = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message MFGroupMemberDB
|
||||||
|
{
|
||||||
|
optional string account_id = 1;
|
||||||
|
optional string nickname = 2;
|
||||||
|
optional string avatar_url = 3;
|
||||||
|
optional int32 sex = 4;
|
||||||
|
optional int64 group_id = 5;
|
||||||
|
optional int32 data_version1 = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MFGroupDB
|
||||||
|
{
|
||||||
|
repeated MFGroupMemberDB members = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MFFriendDB
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
message CMLogin
|
message CMLogin
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user