1
This commit is contained in:
parent
f87ade8108
commit
9178841c23
@ -407,6 +407,9 @@ void App::ProcessIMServerMsg(f8::MsgHdr& hdr)
|
||||
case HID_SyncHelper:
|
||||
ProcessNetMsg(handler, SyncHelper::Instance(), hdr);
|
||||
break;
|
||||
case HID_PlayerMgr:
|
||||
ProcessNetMsg(handler, PlayerMgr::Instance(), hdr);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
||||
|
||||
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendAgreeResponse);
|
||||
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendDeleteResponse);
|
||||
RegisterNetMsgHandler(&immsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState);
|
||||
|
||||
RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList);
|
||||
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup);
|
||||
@ -57,7 +58,7 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline);
|
||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline);
|
||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState);
|
||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState);
|
||||
|
||||
|
||||
RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping);
|
||||
|
||||
|
@ -31,7 +31,6 @@ void Player::Init()
|
||||
(unsigned char*)myself.base_data.account_id.data(),
|
||||
myself.base_data.account_id.size()
|
||||
);
|
||||
NotifyOnline();
|
||||
a8::Timer::Instance()->AddRepeatTimerAndAttach
|
||||
(
|
||||
1000 * 3 + (rand() % 3000),
|
||||
@ -49,6 +48,7 @@ void Player::Init()
|
||||
}
|
||||
RecalcRedPoint();
|
||||
RefreshFriendData();
|
||||
NotifyOnline();
|
||||
}
|
||||
|
||||
void Player::UnInit()
|
||||
@ -1132,7 +1132,25 @@ void Player::ClearApplyByTarget(const std::string& target_id)
|
||||
|
||||
void Player::RefreshFriendData()
|
||||
{
|
||||
|
||||
{
|
||||
ss::SS_IM_QueryUserOnlineState msg;
|
||||
for (auto& pair : friend_hash_) {
|
||||
msg.add_account_ids(pair.second->base_data.account_id);
|
||||
}
|
||||
SendSSMsg(myself, msg);
|
||||
}
|
||||
a8::Timer::Instance()->AddDeadLineTimerAndAttach
|
||||
(
|
||||
1000 * 3,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Player* hum = (Player*)param.sender.GetUserData();
|
||||
hum->QueryUserFromDB();
|
||||
},
|
||||
&timer_attacher.timer_list_
|
||||
);
|
||||
}
|
||||
|
||||
void Player::RemoveHandledApply()
|
||||
@ -1169,3 +1187,62 @@ void Player::QueryUserOnline(std::vector<std::string> account_ids)
|
||||
}
|
||||
SendSSMsg(myself, msg);
|
||||
}
|
||||
|
||||
void Player::QueryUserFromDB()
|
||||
{
|
||||
auto on_ok =
|
||||
[] (a8::XParams& param, const f8::DataSet* data_set)
|
||||
{
|
||||
Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(param.sender.GetString());
|
||||
if (hum && data_set && !data_set->empty()) {
|
||||
for (auto& row : *data_set) {
|
||||
std::string account_id = row[0];
|
||||
std::string nickname = row[1];
|
||||
std::string avatar_url = row[2];
|
||||
int sex = a8::XValue(row[3]);
|
||||
long long data_version1 = a8::XValue(row[4]);
|
||||
long long user_value1 = a8::XValue(row[5]);
|
||||
long long user_value2 = a8::XValue(row[6]);
|
||||
long long user_value3 = a8::XValue(row[7]);
|
||||
Friend* friend_data = hum->GetFriendById(account_id);
|
||||
if (friend_data && friend_data->base_data.base_data_version != data_version1) {
|
||||
friend_data->base_data.nickname = nickname;
|
||||
friend_data->base_data.avatar_url = avatar_url;
|
||||
friend_data->base_data.sex = sex;
|
||||
friend_data->base_data.base_data_version = data_version1;
|
||||
friend_data->base_data.user_value1 = user_value1;
|
||||
friend_data->base_data.user_value2 = user_value2;
|
||||
friend_data->base_data.user_value3 = user_value3;
|
||||
hum->NotifyUserInfoUpdate(friend_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
auto on_error =
|
||||
[] (a8::XParams& param, int error_code, const std::string& error_msg)
|
||||
{
|
||||
};
|
||||
|
||||
for (auto& pair : friend_hash_) {
|
||||
Friend* friend_data = pair.second;
|
||||
if (!friend_data->base_data.online) {
|
||||
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(friend_data->crc32_code);
|
||||
DBEngine::Instance()->ExecAsyncQuery
|
||||
(
|
||||
conn_info,
|
||||
"SELECT account_id, nickname, avatar_url, sex, "
|
||||
" data_version1, user_value1, user_value2, user_value3 "
|
||||
"FROM `user` WHERE account_id='%s';",
|
||||
{
|
||||
friend_data->base_data.account_id
|
||||
},
|
||||
a8::XParams()
|
||||
.SetSender(myself.base_data.account_id)
|
||||
.SetParam1(friend_data->base_data.account_id),
|
||||
on_ok,
|
||||
on_error,
|
||||
friend_data->crc32_code
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +99,7 @@ class Player
|
||||
void NotifyUserInfoUpdate(Friend* friend_data);
|
||||
void FillIMMsgConext(ss::MFIMMsgConext* context);
|
||||
void Update(long long tick);
|
||||
void FillMFUserInfo(cs::MFUserInfo* user_info);
|
||||
|
||||
const std::string AccountId();
|
||||
const std::string SessionId();
|
||||
@ -106,7 +107,6 @@ class Player
|
||||
|
||||
private:
|
||||
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
||||
void FillMFUserInfo(cs::MFUserInfo* user_info);
|
||||
void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
||||
void SaveToDB(a8::XParams param, f8::AsyncDBOnOkFunc on_ok, f8::AsyncDBOnErrorFunc on_error);
|
||||
Friend* GetFriendById(const std::string& friend_id);
|
||||
@ -136,6 +136,7 @@ private:
|
||||
void RefreshFriendData();
|
||||
void RemoveHandledApply();
|
||||
void QueryUserOnline(std::vector<std::string> account_ids);
|
||||
void QueryUserFromDB();
|
||||
|
||||
private:
|
||||
bool dirty_ = false;
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "app.h"
|
||||
#include "gamelog.h"
|
||||
#include "IMListener.h"
|
||||
#include "typeconvert.h"
|
||||
|
||||
#include "framework/cpp/utils.h"
|
||||
|
||||
@ -114,8 +115,9 @@ void PlayerMgr::_SS_IM_QueryUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_Que
|
||||
{
|
||||
ss::SS_IM_PushUserOnlineState respmsg;
|
||||
for (auto& account_id : msg.account_ids()) {
|
||||
if (GetPlayerByAccountId(account_id)) {
|
||||
respmsg.add_online_account_ids(account_id);
|
||||
Player* hum = GetPlayerByAccountId(account_id);
|
||||
if (hum) {
|
||||
hum->FillMFUserInfo(respmsg.add_user_infos());
|
||||
}
|
||||
}
|
||||
IMListener::Instance()->SendMsg(hdr.socket_handle, respmsg);
|
||||
@ -123,13 +125,14 @@ void PlayerMgr::_SS_IM_QueryUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_Que
|
||||
|
||||
void PlayerMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg)
|
||||
{
|
||||
for (auto& account_id : msg.online_account_ids()) {
|
||||
auto itr = watch_players_.find(account_id);
|
||||
for (auto& user_info : msg.user_infos()) {
|
||||
auto itr = watch_players_.find(user_info.base_data().account_id());
|
||||
if (itr != watch_players_.end()) {
|
||||
struct Friend *node, *tmp;
|
||||
list_for_each_entry_safe(node, tmp, &itr->second, watch_node) {
|
||||
if (!node->base_data.online) {
|
||||
node->base_data.online = true;
|
||||
TypeConvert::Convert(user_info.base_data(), node->base_data);
|
||||
TypeConvert::Convert(user_info.temp_custom_data(), node->temp_custom_data);
|
||||
node->hum->NotifyUserInfoUpdate(node);
|
||||
}
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ void TypeConvert::Convert(const cs::MFBaseUserData& base_data_pb, BaseUserData&
|
||||
base_data.nickname = base_data_pb.nickname();
|
||||
base_data.avatar_url = base_data_pb.avatar_url();
|
||||
base_data.sex = base_data_pb.sex();
|
||||
base_data.online = base_data_pb._online();
|
||||
#if 0
|
||||
base_data.group_id = base_data_pb.group_id();
|
||||
#endif
|
||||
|
@ -242,7 +242,7 @@ message SS_IM_QueryUserOnlineState
|
||||
|
||||
message SS_IM_PushUserOnlineState
|
||||
{
|
||||
repeated string online_account_ids = 3;
|
||||
repeated cs.MFUserInfo user_infos = 1;
|
||||
}
|
||||
|
||||
message SS_IM_OnUserOnline
|
||||
|
Loading…
x
Reference in New Issue
Block a user