diff --git a/server/masterserver/app.cc b/server/masterserver/app.cc index 19fd027..d8f8656 100755 --- a/server/masterserver/app.cc +++ b/server/masterserver/app.cc @@ -16,7 +16,9 @@ #include "jsondatamgr.h" #include "handlermgr.h" #include "gsmgr.h" +#include "imsmgr.h" #include "GGListener.h" +#include "IMListener.h" #include "ss_msgid.pb.h" #include "ss_proto.pb.h" @@ -88,7 +90,9 @@ void App::Init(int argc, char* argv[]) JsonDataMgr::Instance()->Init(); uuid.SetMachineId(instance_id); GGListener::Instance()->Init(); + IMListener::Instance()->Init(); GSMgr::Instance()->Init(); + IMSMgr::Instance()->Init(); a8::UdpLog::Instance()->Info("masterserver starting instance_id:%d pid:%d", {instance_id, getpid()}); { @@ -110,7 +114,9 @@ void App::UnInit() if (terminated) { return; } + IMSMgr::Instance()->UnInit(); GSMgr::Instance()->UnInit(); + IMListener::Instance()->UnInit(); GGListener::Instance()->UnInit(); JsonDataMgr::Instance()->UnInit(); f8::MsgQueue::Instance()->UnInit(); @@ -303,6 +309,11 @@ void App::DispatchMsg() ProcessGameGateMsg(hdr); } break; + case SF_IMServer: + { + ProcessIMServerMsg(hdr); + } + break; } if (pdelnode->buf) { free(pdelnode->buf); @@ -332,6 +343,19 @@ void App::ProcessGameGateMsg(f8::MsgHdr& hdr) } } +void App::ProcessIMServerMsg(f8::MsgHdr& hdr) +{ + f8::NetMsgHandler* handler = f8::GetNetMsgHandler(&HandlerMgr::Instance()->immsghandler, + hdr.msgid); + if (handler) { + switch (handler->handlerid) { + case HID_IMSMgr: + ProcessNetMsg(handler, IMSMgr::Instance(), hdr); + break; + } + } +} + void App::ProcessIMMsg() { if (!im_work_node_ && im_top_node_) { diff --git a/server/masterserver/app.h b/server/masterserver/app.h index 815c1d3..ec3dd55 100644 --- a/server/masterserver/app.h +++ b/server/masterserver/app.h @@ -43,6 +43,7 @@ private: void ProcessIMMsg(); void ProcessGameGateMsg(f8::MsgHdr& hdr); + void ProcessIMServerMsg(f8::MsgHdr& hdr); void InitLog(); void UnInitLog(); diff --git a/server/masterserver/constant.h b/server/masterserver/constant.h index a9acaa3..a72db4c 100755 --- a/server/masterserver/constant.h +++ b/server/masterserver/constant.h @@ -18,6 +18,7 @@ enum InnerMesssage_e enum NetHandler_e { HID_GSMgr, + HID_IMSMgr, }; const char* const PROJ_NAME_FMT = "friend_masterserver"; diff --git a/server/masterserver/handlermgr.cc b/server/masterserver/handlermgr.cc index 54cf0ff..dd99e28 100644 --- a/server/masterserver/handlermgr.cc +++ b/server/masterserver/handlermgr.cc @@ -7,6 +7,7 @@ #include "GGListener.h" #include "app.h" #include "gsmgr.h" +#include "imsmgr.h" static void _GMOpsSelfChecking(f8::JsonHttpRequest* request) { @@ -46,6 +47,9 @@ void HandlerMgr::UnInit() void HandlerMgr::RegisterNetMsgHandlers() { RegisterNetMsgHandler(&ggmsghandler, &GSMgr::_SS_WSP_RequestTargetServer); + RegisterNetMsgHandler(&ggmsghandler, &GSMgr::_SS_Ping); + + RegisterNetMsgHandler(&immsghandler, &IMSMgr::_SS_Ping); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/masterserver/handlermgr.h b/server/masterserver/handlermgr.h index 2bf21b8..44c4ddd 100644 --- a/server/masterserver/handlermgr.h +++ b/server/masterserver/handlermgr.h @@ -22,6 +22,7 @@ class HandlerMgr : public a8::Singleton void UnInit(); f8::NetMsgHandlerObject ggmsghandler; + f8::NetMsgHandlerObject immsghandler; void ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& quyerstr); diff --git a/server/masterserver/imsmgr.cc b/server/masterserver/imsmgr.cc new file mode 100644 index 0000000..7989a5f --- /dev/null +++ b/server/masterserver/imsmgr.cc @@ -0,0 +1,28 @@ +#include "precompile.h" + +#include +#include + +#include "imsmgr.h" +#include "app.h" +#include "IMListener.h" + +void IMSMgr::Init() +{ + a8::Timer::Instance()->AddRepeatTimer(1000 * 2, + a8::XParams(), + [] (const a8::XParams& param) + { + }); +} + +void IMSMgr::UnInit() +{ + +} + +void IMSMgr::_SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg) +{ + ss::SS_Pong pongmsg; + IMListener::Instance()->SendMsg(hdr.socket_handle, pongmsg); +} diff --git a/server/masterserver/imsmgr.h b/server/masterserver/imsmgr.h new file mode 100644 index 0000000..8495577 --- /dev/null +++ b/server/masterserver/imsmgr.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ss_proto.pb.h" + +class IMSMgr : public a8::Singleton +{ + public: + enum { HID = HID_IMSMgr }; + + private: + IMSMgr() {}; + friend class a8::Singleton; + + public: + + void Init(); + void UnInit(); + + void _SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg); + + private: + + private: + +};