From 5e6e9a7ce43c526159cb41eab1a8a56926b80d47 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 3 May 2020 20:49:31 +0800 Subject: [PATCH] add playermgr player --- server/imserver/app.cc | 3 ++ server/imserver/constant.h | 4 +- server/imserver/handlermgr.cc | 4 ++ server/imserver/player.cc | 14 ++++++ server/imserver/player.h | 17 +++++++ server/imserver/playermgr.cc | 69 ++++++++++++++++++++++++++ server/imserver/playermgr.h | 38 ++++++++++++++ server/tools/protobuild/cs_msgid.proto | 4 +- server/tools/protobuild/cs_proto.proto | 9 ++++ 9 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 server/imserver/player.cc create mode 100644 server/imserver/player.h create mode 100644 server/imserver/playermgr.cc create mode 100644 server/imserver/playermgr.h diff --git a/server/imserver/app.cc b/server/imserver/app.cc index e27e097..12a91b9 100644 --- a/server/imserver/app.cc +++ b/server/imserver/app.cc @@ -19,6 +19,7 @@ #include "handlermgr.h" #include "ss_msgid.pb.h" #include "ss_proto.pb.h" +#include "playermgr.h" #include "MSConnMgr.h" #include "IMConnMgr.h" @@ -123,6 +124,7 @@ bool App::Init(int argc, char* argv[]) IMConnMgr::Instance()->Init(); MSConnMgr::Instance()->Init(); WSListener::Instance()->Init(); + PlayerMgr::Instance()->Init(); a8::UdpLog::Instance()->Info("friend_imserver starting instance_id:%d pid:%d ", { @@ -169,6 +171,7 @@ bool App::Init(int argc, char* argv[]) void App::UnInit() { a8::XPrintf("friend_imserver terminating instance_id:%d pid:%d\n", {instance_id, getpid()}); + PlayerMgr::Instance()->UnInit(); WSListener::Instance()->UnInit(); IMConnMgr::Instance()->UnInit(); MSConnMgr::Instance()->UnInit(); diff --git a/server/imserver/constant.h b/server/imserver/constant.h index 7258543..e65dc2b 100644 --- a/server/imserver/constant.h +++ b/server/imserver/constant.h @@ -26,7 +26,9 @@ enum NetHandler_e { HID_WSListener, HID_MasterSvrMgr, - HID_IMListener + HID_IMListener, + HID_PlayerMgr, + HID_Player, }; const char* const PROJ_NAME_FMT = "friend_imserver"; diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index b9acc6d..ba0f510 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -6,8 +6,10 @@ #include "WSListener.h" #include "app.h" +#include "playermgr.h" #include "ss_proto.pb.h" +#include "cs_proto.pb.h" static void _GMOpsSelfChecking(f8::JsonHttpRequest* request) { @@ -30,6 +32,8 @@ void HandlerMgr::UnInit() void HandlerMgr::RegisterNetMsgHandlers() { RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); + RegisterNetMsgHandler(&wsmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect); + RegisterNetMsgHandler(&wsmsghandler, &PlayerMgr::_CMLogin); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/imserver/player.cc b/server/imserver/player.cc new file mode 100644 index 0000000..60c9f2d --- /dev/null +++ b/server/imserver/player.cc @@ -0,0 +1,14 @@ +#include "precompile.h" + +#include "player.h" +#include "cs_proto.pb.h" + +void Player::Init() +{ + +} + +void Player::UnInit() +{ + +} diff --git a/server/imserver/player.h b/server/imserver/player.h new file mode 100644 index 0000000..693d89a --- /dev/null +++ b/server/imserver/player.h @@ -0,0 +1,17 @@ +#pragma once + +namespace cs +{ + class MFPair; +} + +class Player +{ + public: + enum { HID = HID_Player }; + + public: + void Init(); + void UnInit(); + +}; diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc new file mode 100644 index 0000000..702a4d2 --- /dev/null +++ b/server/imserver/playermgr.cc @@ -0,0 +1,69 @@ +#include "precompile.h" + +#include "playermgr.h" +#include "player.h" +#include "cs_proto.pb.h" + +#include "framework/cpp/utils.h" + +void PlayerMgr::Init() +{ +} + +void PlayerMgr::UnInit() +{ +} + +void PlayerMgr::_SS_WSP_SocketDisconnect(f8::MsgHdr& hdr, const ss::SS_WSP_SocketDisconnect& msg) +{ + Player* hum = GetPlayerBySocket(hdr.socket_handle); + if (hum) { + RemovePlayerBySocket(hdr.socket_handle); + } +} + +void PlayerMgr::_CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg) +{ + +} + +int PlayerMgr::OnlineNum() +{ + return socket_hash_.size(); +} + +Player* PlayerMgr::GetPlayerBySocket(int socket) +{ + auto itr = socket_hash_.find(socket); + return itr != socket_hash_.end() ? itr->second : nullptr; +} + +void PlayerMgr::OnClientDisconnect(a8::XParams& param) +{ + int gg_socket = param.sender; + + std::vector socket_list; + for (auto& pair : socket_hash_) { + unsigned short parent_socket_handle = (pair.first >> 16) & 0xFFFF; + if (parent_socket_handle == gg_socket) { + socket_list.push_back(pair.first); + } + } + for (int socket_handle : socket_list) { + Player* hum = GetPlayerBySocket(socket_handle); + if (hum) { + RemovePlayerBySocket(socket_handle); + } + } +} + +void PlayerMgr::RemovePlayerBySocket(int socket_handle) +{ + auto itr = socket_hash_.find(socket_handle); + if (itr != socket_hash_.end()) { + #if 0 + itr->second->socket_handle = 0; + #endif + socket_hash_.erase(itr); + } +} diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h new file mode 100644 index 0000000..db81707 --- /dev/null +++ b/server/imserver/playermgr.h @@ -0,0 +1,38 @@ +#pragma once + +namespace cs +{ + class CMLogin; +} + +namespace ss +{ + class SS_WSP_SocketDisconnect; +} + +class Player; +class PlayerMgr : public a8::Singleton +{ + public: + enum { HID = HID_PlayerMgr }; + + private: + PlayerMgr() {}; + friend class a8::Singleton; + + public: + void Init(); + void UnInit(); + + void _SS_WSP_SocketDisconnect(f8::MsgHdr& hdr, const ss::SS_WSP_SocketDisconnect& msg); + void _CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg); + + private: + int OnlineNum(); + Player* GetPlayerBySocket(int socket); + void OnClientDisconnect(a8::XParams& param); + void RemovePlayerBySocket(int socket_handle); + + private: + std::map socket_hash_; +}; diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index d887216..9a08e7a 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -5,7 +5,7 @@ enum CMMessageId_e { _CMPing = 101; - _CMJoin = 103; + _CMLogin = 103; } enum SMMessageId_e @@ -13,5 +13,5 @@ enum SMMessageId_e _SMPing = 101; _SMRpcError = 102; - _SMJoinedNotify = 103; + _SMLogin = 103; } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 72b00ca..890f3f2 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -14,3 +14,12 @@ message SMPing { optional int32 param1 = 1; } + +// +message CMLogin +{ +} +message SMLogin +{ + optional int32 param1 = 1; +}