diff --git a/server/imserver/IMListener.cc b/server/imserver/IMListener.cc index 6c6c268..de85a4c 100644 --- a/server/imserver/IMListener.cc +++ b/server/imserver/IMListener.cc @@ -126,3 +126,9 @@ void IMListener::MarkClient(unsigned short sockhandle, bool is_active) { tcp_listener_->MarkClient(sockhandle, is_active); } + +void IMListener::_SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg) +{ + ss::SS_Pong pongmsg; + SendMsg(hdr.socket_handle, pongmsg); +} diff --git a/server/imserver/IMListener.h b/server/imserver/IMListener.h index ad2ff6b..2a50695 100644 --- a/server/imserver/IMListener.h +++ b/server/imserver/IMListener.h @@ -6,6 +6,11 @@ namespace a8 class TcpListener; } +namespace ss +{ + class SS_Ping; +} + class IMListener : public a8::Singleton { private: @@ -34,6 +39,7 @@ class IMListener : public a8::Singleton long long GetSendNodeNum(); long long GetSentBytesNum(); + void _SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg); private: a8::TcpListener *tcp_listener_ = nullptr; }; diff --git a/server/imserver/WSListener.cc b/server/imserver/WSListener.cc index 5774844..28270fa 100644 --- a/server/imserver/WSListener.cc +++ b/server/imserver/WSListener.cc @@ -112,5 +112,6 @@ void WSListener::MarkClient(unsigned short sockhandle, bool is_active) void WSListener::_SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg) { - + ss::SS_Pong pongmsg; + SendProxyMsg(hdr.socket_handle, pongmsg); } diff --git a/server/imserver/app.cc b/server/imserver/app.cc index 7ad5c27..5e58e4d 100644 --- a/server/imserver/app.cc +++ b/server/imserver/app.cc @@ -14,6 +14,7 @@ #include "framework/cpp/netmsghandler.h" #include "app.h" +#include "IMListener.h" #include "WSListener.h" #include "jsondatamgr.h" #include "handlermgr.h" @@ -124,6 +125,7 @@ bool App::Init(int argc, char* argv[]) IMConnMgr::Instance()->Init(); MSConnMgr::Instance()->Init(); WSListener::Instance()->Init(); + IMListener::Instance()->Init(); PlayerMgr::Instance()->Init(); a8::UdpLog::Instance()->Info("friend_imserver starting instance_id:%d pid:%d ", @@ -172,6 +174,7 @@ void App::UnInit() { a8::XPrintf("friend_imserver terminating instance_id:%d pid:%d\n", {instance_id, getpid()}); PlayerMgr::Instance()->UnInit(); + IMListener::Instance()->UnInit(); WSListener::Instance()->UnInit(); IMConnMgr::Instance()->UnInit(); MSConnMgr::Instance()->UnInit(); @@ -356,7 +359,7 @@ void App::DispatchMsg() break; case SF_IMServer: { - + ProcessIMServerMsg(hdr); } break; case SF_IMConn: @@ -417,6 +420,23 @@ void App::ProcessWSProxyMsg(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_IMListener: + ProcessNetMsg(handler, IMListener::Instance(), hdr); + break; + default: + { + } + break; + } + } +} + void App::ProcessMasterServerMsg(f8::MsgHdr& hdr) { f8::NetMsgHandler* handler = f8::GetNetMsgHandler(&HandlerMgr::Instance()->msmsghandler, diff --git a/server/imserver/app.h b/server/imserver/app.h index 6b70310..f45c41c 100644 --- a/server/imserver/app.h +++ b/server/imserver/app.h @@ -43,6 +43,7 @@ private: void ProcessIMMsg(); void ProcessWSProxyMsg(f8::MsgHdr& hdr); + void ProcessIMServerMsg(f8::MsgHdr& hdr); void ProcessMasterServerMsg(f8::MsgHdr& hdr); void ProcessTargetServerMsg(f8::MsgHdr& hdr); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index efce7b6..d3290e7 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -4,6 +4,7 @@ #include "handlermgr.h" +#include "IMListener.h" #include "WSListener.h" #include "app.h" #include "player.h" @@ -32,6 +33,8 @@ void HandlerMgr::UnInit() void HandlerMgr::RegisterNetMsgHandlers() { + RegisterNetMsgHandler(&immsghandler, &IMListener::_SS_Ping); + RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); RegisterNetMsgHandler(&wsmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect); diff --git a/server/imserver/handlermgr.h b/server/imserver/handlermgr.h index d8f58e1..0199388 100644 --- a/server/imserver/handlermgr.h +++ b/server/imserver/handlermgr.h @@ -23,6 +23,7 @@ class HandlerMgr : public a8::Singleton f8::NetMsgHandlerObject wsmsghandler; f8::NetMsgHandlerObject msmsghandler; + f8::NetMsgHandlerObject immsghandler; void ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& querystr);