From a181513c832e8f54dc1f72c9b42c06220336fa1f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 24 Sep 2020 11:51:10 +0800 Subject: [PATCH] 1 --- server/imserver/IMConn.h | 4 ++-- server/imserver/jsondatamgr.cc | 5 +++++ server/imserver/jsondatamgr.h | 1 + server/imserver/player.cc | 13 ++++++++++++- server/imserver/synchelper.cc | 2 +- server/imserver/synchelper.h | 4 ++-- third_party/framework | 2 +- 7 files changed, 24 insertions(+), 7 deletions(-) diff --git a/server/imserver/IMConn.h b/server/imserver/IMConn.h index 39e2fb1..8c4bf8e 100644 --- a/server/imserver/IMConn.h +++ b/server/imserver/IMConn.h @@ -27,12 +27,12 @@ class IMConn bool Connected(); template - void SendMsg(T& msg) + void SendMsg(const T& msg) { static int msgid = f8::Net_GetMessageId(msg); SendMsg(msgid, msg); } - void SendMsg(int msgid, ::google::protobuf::Message& msg) + void SendMsg(int msgid, const ::google::protobuf::Message& msg) { f8::Net_SendMsg(tcp_client_, 0, msgid, msg); #ifdef DEBUG diff --git a/server/imserver/jsondatamgr.cc b/server/imserver/jsondatamgr.cc index 70e66ea..a9cae5b 100644 --- a/server/imserver/jsondatamgr.cc +++ b/server/imserver/jsondatamgr.cc @@ -82,3 +82,8 @@ bool JsonDataMgr::GetRankServerConf(std::string& ip, int& port) port = conf->At("rankserver_ip")->AsXValue(); return true; } + +int JsonDataMgr::GetIMInstanceId(long long id) +{ + return (id % imserver_cluster_json_.Size()) + 1; +} diff --git a/server/imserver/jsondatamgr.h b/server/imserver/jsondatamgr.h index ab3726d..7095e29 100644 --- a/server/imserver/jsondatamgr.h +++ b/server/imserver/jsondatamgr.h @@ -15,6 +15,7 @@ class JsonDataMgr : public a8::Singleton std::shared_ptr GetRankServerClusterConf(); std::shared_ptr GetMysqlClusterConf(); bool GetRankServerConf(std::string& ip, int& port); + int GetIMInstanceId(long long id); private: std::string work_path_ = "../config"; diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 47554af..71a394d 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -24,6 +24,7 @@ #include "MSConn.h" #include "MSConnMgr.h" #include "handlermgr.h" +#include "jsondatamgr.h" void Player::Init() { @@ -618,6 +619,8 @@ void Player::_CMGuildInfo(f8::MsgHdr& hdr, const cs::CMGuildInfo& msg) SendMsg(respmsg); return; } + SyncHelper::Instance()->SendIMConnMsg(JsonDataMgr::Instance()->GetIMInstanceId(msg.guild_id()), + msg); } void Player::_CMGuildCreate(f8::MsgHdr& hdr, const cs::CMGuildCreate& msg) @@ -627,7 +630,15 @@ void Player::_CMGuildCreate(f8::MsgHdr& hdr, const cs::CMGuildCreate& msg) void Player::_CMGuildJoin(f8::MsgHdr& hdr, const cs::CMGuildJoin& msg) { - + cs::SMGuildJoin respmsg; + if (msg.guild_id() == 0 && GuildId() == 0) { + respmsg.set_errcode(1); + respmsg.set_errmsg("你已经有公会"); + SendMsg(respmsg); + return; + } + SyncHelper::Instance()->SendIMConnMsg(JsonDataMgr::Instance()->GetIMInstanceId(msg.guild_id()), + msg); } void Player::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg) diff --git a/server/imserver/synchelper.cc b/server/imserver/synchelper.cc index 7e85999..543946d 100644 --- a/server/imserver/synchelper.cc +++ b/server/imserver/synchelper.cc @@ -175,7 +175,7 @@ void SyncHelper::SS_IM_FriendDeleteRequest_TimeOut(ss::SS_IM_FriendDeleteRequest ); } -void SyncHelper::SendIMConnMsg(int instance_id, int msgid, ::google::protobuf::Message& msg) +void SyncHelper::SendIMConnMsg(int instance_id, int msgid, const ::google::protobuf::Message& msg) { if (instance_id == App::Instance()->instance_id) { int packlen = msg.ByteSize(); diff --git a/server/imserver/synchelper.h b/server/imserver/synchelper.h index 8c14204..8b5f7c1 100644 --- a/server/imserver/synchelper.h +++ b/server/imserver/synchelper.h @@ -48,13 +48,13 @@ public: void BroadcastIMConnMsg(int msgid, ::google::protobuf::Message& msg); template - void SendIMConnMsg(int intance_id, T& msg) + void SendIMConnMsg(int intance_id, const T& msg) { static int msgid = f8::Net_GetMessageId(msg); SendIMConnMsg(msgid, msg); } - void SendIMConnMsg(int intance_id, int msgid, ::google::protobuf::Message& msg); + void SendIMConnMsg(int intance_id, int msgid, const ::google::protobuf::Message& msg); std::map pending_request_hash_; }; diff --git a/third_party/framework b/third_party/framework index ea69b96..a1c591d 160000 --- a/third_party/framework +++ b/third_party/framework @@ -1 +1 @@ -Subproject commit ea69b96451e7004430e99b86db1cfd3ae4d76c6b +Subproject commit a1c591dd5f2bad2aba07134fa6b9c2415abff318