1
This commit is contained in:
parent
f87ade8108
commit
9178841c23
@ -407,6 +407,9 @@ void App::ProcessIMServerMsg(f8::MsgHdr& hdr)
|
|||||||
case HID_SyncHelper:
|
case HID_SyncHelper:
|
||||||
ProcessNetMsg(handler, SyncHelper::Instance(), hdr);
|
ProcessNetMsg(handler, SyncHelper::Instance(), hdr);
|
||||||
break;
|
break;
|
||||||
|
case HID_PlayerMgr:
|
||||||
|
ProcessNetMsg(handler, PlayerMgr::Instance(), hdr);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
|||||||
|
|
||||||
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendAgreeResponse);
|
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendAgreeResponse);
|
||||||
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendDeleteResponse);
|
RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendDeleteResponse);
|
||||||
|
RegisterNetMsgHandler(&immsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState);
|
||||||
|
|
||||||
RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList);
|
RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList);
|
||||||
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup);
|
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup);
|
||||||
@ -57,7 +58,7 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
|||||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline);
|
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline);
|
||||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline);
|
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline);
|
||||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState);
|
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState);
|
||||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState);
|
|
||||||
|
|
||||||
RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping);
|
RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping);
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ void Player::Init()
|
|||||||
(unsigned char*)myself.base_data.account_id.data(),
|
(unsigned char*)myself.base_data.account_id.data(),
|
||||||
myself.base_data.account_id.size()
|
myself.base_data.account_id.size()
|
||||||
);
|
);
|
||||||
NotifyOnline();
|
|
||||||
a8::Timer::Instance()->AddRepeatTimerAndAttach
|
a8::Timer::Instance()->AddRepeatTimerAndAttach
|
||||||
(
|
(
|
||||||
1000 * 3 + (rand() % 3000),
|
1000 * 3 + (rand() % 3000),
|
||||||
@ -49,6 +48,7 @@ void Player::Init()
|
|||||||
}
|
}
|
||||||
RecalcRedPoint();
|
RecalcRedPoint();
|
||||||
RefreshFriendData();
|
RefreshFriendData();
|
||||||
|
NotifyOnline();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::UnInit()
|
void Player::UnInit()
|
||||||
@ -1132,7 +1132,25 @@ void Player::ClearApplyByTarget(const std::string& target_id)
|
|||||||
|
|
||||||
void Player::RefreshFriendData()
|
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()
|
void Player::RemoveHandledApply()
|
||||||
@ -1169,3 +1187,62 @@ void Player::QueryUserOnline(std::vector<std::string> account_ids)
|
|||||||
}
|
}
|
||||||
SendSSMsg(myself, msg);
|
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 NotifyUserInfoUpdate(Friend* friend_data);
|
||||||
void FillIMMsgConext(ss::MFIMMsgConext* context);
|
void FillIMMsgConext(ss::MFIMMsgConext* context);
|
||||||
void Update(long long tick);
|
void Update(long long tick);
|
||||||
|
void FillMFUserInfo(cs::MFUserInfo* user_info);
|
||||||
|
|
||||||
const std::string AccountId();
|
const std::string AccountId();
|
||||||
const std::string SessionId();
|
const std::string SessionId();
|
||||||
@ -106,7 +107,6 @@ class Player
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
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 ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
||||||
void SaveToDB(a8::XParams param, f8::AsyncDBOnOkFunc on_ok, f8::AsyncDBOnErrorFunc on_error);
|
void SaveToDB(a8::XParams param, f8::AsyncDBOnOkFunc on_ok, f8::AsyncDBOnErrorFunc on_error);
|
||||||
Friend* GetFriendById(const std::string& friend_id);
|
Friend* GetFriendById(const std::string& friend_id);
|
||||||
@ -136,6 +136,7 @@ private:
|
|||||||
void RefreshFriendData();
|
void RefreshFriendData();
|
||||||
void RemoveHandledApply();
|
void RemoveHandledApply();
|
||||||
void QueryUserOnline(std::vector<std::string> account_ids);
|
void QueryUserOnline(std::vector<std::string> account_ids);
|
||||||
|
void QueryUserFromDB();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool dirty_ = false;
|
bool dirty_ = false;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "gamelog.h"
|
#include "gamelog.h"
|
||||||
#include "IMListener.h"
|
#include "IMListener.h"
|
||||||
|
#include "typeconvert.h"
|
||||||
|
|
||||||
#include "framework/cpp/utils.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;
|
ss::SS_IM_PushUserOnlineState respmsg;
|
||||||
for (auto& account_id : msg.account_ids()) {
|
for (auto& account_id : msg.account_ids()) {
|
||||||
if (GetPlayerByAccountId(account_id)) {
|
Player* hum = GetPlayerByAccountId(account_id);
|
||||||
respmsg.add_online_account_ids(account_id);
|
if (hum) {
|
||||||
|
hum->FillMFUserInfo(respmsg.add_user_infos());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IMListener::Instance()->SendMsg(hdr.socket_handle, respmsg);
|
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)
|
void PlayerMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg)
|
||||||
{
|
{
|
||||||
for (auto& account_id : msg.online_account_ids()) {
|
for (auto& user_info : msg.user_infos()) {
|
||||||
auto itr = watch_players_.find(account_id);
|
auto itr = watch_players_.find(user_info.base_data().account_id());
|
||||||
if (itr != watch_players_.end()) {
|
if (itr != watch_players_.end()) {
|
||||||
struct Friend *node, *tmp;
|
struct Friend *node, *tmp;
|
||||||
list_for_each_entry_safe(node, tmp, &itr->second, watch_node) {
|
list_for_each_entry_safe(node, tmp, &itr->second, watch_node) {
|
||||||
if (!node->base_data.online) {
|
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);
|
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.nickname = base_data_pb.nickname();
|
||||||
base_data.avatar_url = base_data_pb.avatar_url();
|
base_data.avatar_url = base_data_pb.avatar_url();
|
||||||
base_data.sex = base_data_pb.sex();
|
base_data.sex = base_data_pb.sex();
|
||||||
|
base_data.online = base_data_pb._online();
|
||||||
#if 0
|
#if 0
|
||||||
base_data.group_id = base_data_pb.group_id();
|
base_data.group_id = base_data_pb.group_id();
|
||||||
#endif
|
#endif
|
||||||
|
@ -242,7 +242,7 @@ message SS_IM_QueryUserOnlineState
|
|||||||
|
|
||||||
message SS_IM_PushUserOnlineState
|
message SS_IM_PushUserOnlineState
|
||||||
{
|
{
|
||||||
repeated string online_account_ids = 3;
|
repeated cs.MFUserInfo user_infos = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SS_IM_OnUserOnline
|
message SS_IM_OnUserOnline
|
||||||
|
Loading…
x
Reference in New Issue
Block a user