1
This commit is contained in:
parent
631830c3f1
commit
93f07b409f
@ -5,6 +5,9 @@
|
|||||||
#include "cachemgr.h"
|
#include "cachemgr.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "jsondatamgr.h"
|
#include "jsondatamgr.h"
|
||||||
|
#include "typeconvert.h"
|
||||||
|
#include "svrmgr.h"
|
||||||
|
#include "IMListener.h"
|
||||||
|
|
||||||
void CacheMgr::Init()
|
void CacheMgr::Init()
|
||||||
{
|
{
|
||||||
@ -18,17 +21,33 @@ void CacheMgr::UnInit()
|
|||||||
|
|
||||||
void CacheMgr::_SS_IM_UserOnline(f8::MsgHdr& hdr, const ss::SS_IM_UserOnline& msg)
|
void CacheMgr::_SS_IM_UserOnline(f8::MsgHdr& hdr, const ss::SS_IM_UserOnline& msg)
|
||||||
{
|
{
|
||||||
for (auto& user_info : msg.user_infos()) {
|
SvrNode* svr_node = SvrMgr::Instance()->GetNodeBySocket(hdr.socket_handle);
|
||||||
unsigned int code = a8::openssl::Crc32
|
if (svr_node) {
|
||||||
(
|
for (auto& user_info : msg.user_infos()) {
|
||||||
(unsigned char*)user_info.base_data().account_id().data(),
|
unsigned int crc32_code = a8::openssl::Crc32
|
||||||
user_info.base_data().account_id().size()
|
(
|
||||||
);
|
(unsigned char*)user_info.base_data().account_id().data(),
|
||||||
int instance_id = code % JsonDataMgr::Instance()->GetMasterSvrNum() + 1;
|
user_info.base_data().account_id().size()
|
||||||
if (App::Instance()->instance_id == instance_id) {
|
);
|
||||||
Friend* friend_data = GetFriendData(user_info.base_data().account_id());
|
int instance_id = crc32_code % JsonDataMgr::Instance()->GetMasterSvrNum() + 1;
|
||||||
if (friend_data) {
|
if (App::Instance()->instance_id == instance_id) {
|
||||||
|
Friend* friend_data = GetFriendData(user_info.base_data().account_id());
|
||||||
|
if (!friend_data) {
|
||||||
|
friend_data = new Friend();
|
||||||
|
list_add_tail(&friend_data->human_entry, &svr_node->human_list);
|
||||||
|
friend_data->svr_node = svr_node;
|
||||||
|
friend_hash_[user_info.base_data().account_id()] = friend_data;
|
||||||
|
} else {
|
||||||
|
if (friend_data->svr_node != svr_node) {
|
||||||
|
if (!list_empty(&friend_data->human_entry)) {
|
||||||
|
list_del_init(&friend_data->human_entry);
|
||||||
|
}
|
||||||
|
list_add_tail(&friend_data->human_entry, &svr_node->human_list);
|
||||||
|
friend_data->svr_node = svr_node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TypeConvert::Convert(user_info.base_data(), friend_data->base_data);
|
||||||
|
TypeConvert::Convert(user_info.temp_custom_data(), friend_data->temp_custom_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -36,12 +55,33 @@ void CacheMgr::_SS_IM_UserOnline(f8::MsgHdr& hdr, const ss::SS_IM_UserOnline& ms
|
|||||||
|
|
||||||
void CacheMgr::_SS_IM_UserOffline(f8::MsgHdr& hdr, const ss::SS_IM_UserOffline& msg)
|
void CacheMgr::_SS_IM_UserOffline(f8::MsgHdr& hdr, const ss::SS_IM_UserOffline& msg)
|
||||||
{
|
{
|
||||||
|
SvrNode* svr_node = SvrMgr::Instance()->GetNodeBySocket(hdr.socket_handle);
|
||||||
|
if (svr_node) {
|
||||||
|
for (const std::string& account_id : msg.account_ids()) {
|
||||||
|
Friend* friend_data = GetFriendData(account_id);
|
||||||
|
if (friend_data) {
|
||||||
|
friend_data->base_data.online = false;
|
||||||
|
if (!list_empty(&friend_data->human_entry)) {
|
||||||
|
list_del_init(&friend_data->human_entry);
|
||||||
|
}
|
||||||
|
friend_data->svr_node = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CacheMgr::_SS_IM_PullUserList(f8::MsgHdr& hdr, const ss::SS_IM_PullUserList& msg)
|
void CacheMgr::_SS_IM_PullUserList(f8::MsgHdr& hdr, const ss::SS_IM_PullUserList& msg)
|
||||||
{
|
{
|
||||||
|
ss::SS_MS_PushUserList respmsg;
|
||||||
|
for (const std::string& account_id : msg.account_ids()) {
|
||||||
|
Friend* friend_data = GetFriendData(account_id);
|
||||||
|
if (friend_data) {
|
||||||
|
auto p = respmsg.add_user_infos();
|
||||||
|
TypeConvert::Convert(friend_data->base_data, *p->mutable_base_data());
|
||||||
|
TypeConvert::Convert(friend_data->temp_custom_data, *p->mutable_temp_custom_data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IMListener::Instance()->SendMsg(hdr.socket_handle, respmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
Friend* CacheMgr::GetFriendData(const std::string& account_id)
|
Friend* CacheMgr::GetFriendData(const std::string& account_id)
|
||||||
|
@ -42,6 +42,7 @@ class SvrMgr : public a8::Singleton<SvrMgr>
|
|||||||
|
|
||||||
void ___GSList(f8::JsonHttpRequest* request);
|
void ___GSList(f8::JsonHttpRequest* request);
|
||||||
|
|
||||||
|
SvrNode* GetNodeBySocket(int socket_handle);
|
||||||
void OnIMServerDisconnect(a8::XParams& param);
|
void OnIMServerDisconnect(a8::XParams& param);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -49,7 +50,6 @@ class SvrMgr : public a8::Singleton<SvrMgr>
|
|||||||
void RearrangeNode();
|
void RearrangeNode();
|
||||||
void ClearTimeOutNode();
|
void ClearTimeOutNode();
|
||||||
SvrNode* GetNodeByKey(const std::string& key);
|
SvrNode* GetNodeByKey(const std::string& key);
|
||||||
SvrNode* GetNodeBySocket(int socket_handle);
|
|
||||||
void RemoveNode(SvrNode* node);
|
void RemoveNode(SvrNode* node);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -14,11 +14,22 @@ void TypeConvert::Convert(const ss::MFBaseUserDataDB& base_data_pb, const BaseUs
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TypeConvert::Convert(const cs::MFBaseUserData& base_data_pb, BaseUserData& base_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void TypeConvert::Convert(const BaseUserData& base_data, cs::MFBaseUserData& base_data_pb)
|
void TypeConvert::Convert(const BaseUserData& base_data, cs::MFBaseUserData& base_data_pb)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TypeConvert::Convert(const cs::MFUserTempCustomData& tmpe_custom_data_pb,
|
||||||
|
UserTempCustomData& temp_custom_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void TypeConvert::Convert(const UserTempCustomData& temp_custom_data,
|
void TypeConvert::Convert(const UserTempCustomData& temp_custom_data,
|
||||||
cs::MFUserTempCustomData& tmpe_custom_data_pb)
|
cs::MFUserTempCustomData& tmpe_custom_data_pb)
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,10 @@ class TypeConvert
|
|||||||
public:
|
public:
|
||||||
static void Convert(const BaseUserData& base_data, ss::MFBaseUserDataDB& base_data_pb);
|
static void Convert(const BaseUserData& base_data, ss::MFBaseUserDataDB& base_data_pb);
|
||||||
static void Convert(const ss::MFBaseUserDataDB& base_data_pb, const BaseUserData& base_data);
|
static void Convert(const ss::MFBaseUserDataDB& base_data_pb, const BaseUserData& base_data);
|
||||||
|
static void Convert(const cs::MFBaseUserData& base_data_pb, BaseUserData& base_data);
|
||||||
static void Convert(const BaseUserData& base_data, cs::MFBaseUserData& base_data_pb);
|
static void Convert(const BaseUserData& base_data, cs::MFBaseUserData& base_data_pb);
|
||||||
|
static void Convert(const cs::MFUserTempCustomData& tmpe_custom_data_pb,
|
||||||
|
UserTempCustomData& temp_custom_data);
|
||||||
static void Convert(const UserTempCustomData& temp_custom_data,
|
static void Convert(const UserTempCustomData& temp_custom_data,
|
||||||
cs::MFUserTempCustomData& tmpe_custom_data_pb);
|
cs::MFUserTempCustomData& tmpe_custom_data_pb);
|
||||||
};
|
};
|
||||||
|
@ -36,7 +36,6 @@ struct Friend
|
|||||||
{
|
{
|
||||||
BaseUserData base_data;
|
BaseUserData base_data;
|
||||||
UserTempCustomData temp_custom_data;
|
UserTempCustomData temp_custom_data;
|
||||||
unsigned int crc32_code = 0;
|
|
||||||
|
|
||||||
list_head human_entry;
|
list_head human_entry;
|
||||||
struct SvrNode* svr_node = nullptr;
|
struct SvrNode* svr_node = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user