添加序列化处理group friend
This commit is contained in:
parent
7e0aec0938
commit
ddd0dffd5b
@ -1,6 +1,12 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include <a8/timer.h>
|
||||
|
||||
#include "group.h"
|
||||
#include "cs_proto.pb.h"
|
||||
#include "ss_proto.pb.h"
|
||||
#include "dbengine.h"
|
||||
#include "app.h"
|
||||
|
||||
void Group::Init()
|
||||
{
|
||||
@ -9,7 +15,10 @@ void Group::Init()
|
||||
|
||||
void Group::UnInit()
|
||||
{
|
||||
|
||||
for (auto& pair : member_hash_) {
|
||||
delete pair.second;
|
||||
}
|
||||
member_hash_.clear();
|
||||
}
|
||||
|
||||
GroupMember* Group::GetMember(const std::string& account_id)
|
||||
@ -25,7 +34,8 @@ bool Group::IsFull()
|
||||
|
||||
void Group::Rename(const std::string& new_group_name)
|
||||
{
|
||||
|
||||
group_name = new_group_name;
|
||||
MarkDirty();
|
||||
}
|
||||
|
||||
void Group::AddMember(GroupMember* member)
|
||||
@ -34,6 +44,11 @@ void Group::AddMember(GroupMember* member)
|
||||
abort();
|
||||
}
|
||||
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)
|
||||
@ -42,9 +57,86 @@ void Group::RemoveMember(const std::string& account_id)
|
||||
if (member) {
|
||||
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
|
||||
|
||||
#include <a8/timer_attacher.h>
|
||||
|
||||
struct GroupMember
|
||||
{
|
||||
std::string account_id;
|
||||
@ -11,6 +13,12 @@ struct GroupMember
|
||||
int data_version1 = 0;
|
||||
};
|
||||
|
||||
namespace cs
|
||||
{
|
||||
class MFGroupDB;
|
||||
}
|
||||
|
||||
struct timer_list;
|
||||
class Group
|
||||
{
|
||||
public:
|
||||
@ -19,6 +27,7 @@ class Group
|
||||
std::string owner_id;
|
||||
std::string creator_id;
|
||||
int createtime = 0;
|
||||
a8::TimerAttacher timer_attacher;
|
||||
|
||||
void Init();
|
||||
void UnInit();
|
||||
@ -28,8 +37,14 @@ class Group
|
||||
GroupMember* GetMember(const std::string& account_id);
|
||||
void AddMember(GroupMember* member);
|
||||
void RemoveMember(const std::string& account_id);
|
||||
void MakrDirty();
|
||||
void MarkDirty();
|
||||
|
||||
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_;
|
||||
};
|
||||
|
@ -5,8 +5,9 @@
|
||||
#include "player.h"
|
||||
#include "playermgr.h"
|
||||
#include "dbengine.h"
|
||||
#include "app.h"
|
||||
#include "MSConnMgr.h"
|
||||
#include "dbengine.h"
|
||||
#include "app.h"
|
||||
|
||||
void Player::Init()
|
||||
{
|
||||
@ -203,3 +204,49 @@ void Player::ForwardGroupCMMsg(f8::MsgHdr& hdr, long long 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 "WSListener.h"
|
||||
|
||||
struct timer_list;
|
||||
class Player
|
||||
{
|
||||
public:
|
||||
@ -50,14 +51,20 @@ class Player
|
||||
void SyncLocToMasterServer();
|
||||
void NotifyOnline();
|
||||
void NotifyOffline();
|
||||
void MarkDirty();
|
||||
|
||||
private:
|
||||
void AsyncGetFriendList();
|
||||
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
||||
void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext);
|
||||
void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
||||
void FillFriendDB(cs::MFFriendDB& friend_db);
|
||||
void SaveToDB();
|
||||
|
||||
private:
|
||||
bool dirty_ = false;
|
||||
timer_list* dirty_timer_ = nullptr;
|
||||
|
||||
std::map<std::string, Friend> friend_hash_;
|
||||
bool reading_friends_list_ = false;
|
||||
bool friend_list_syncok_ = false;
|
||||
|
@ -24,6 +24,26 @@ message MFUserInfo
|
||||
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
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user