diff --git a/server/masterserver/GGListener.cc b/server/masterserver/GGListener.cc index 6129e3c..2a79f49 100644 --- a/server/masterserver/GGListener.cc +++ b/server/masterserver/GGListener.cc @@ -28,13 +28,14 @@ public: if (buflen - offset < sizeof(f8::PackHead) + p->packlen) { break; } - App::Instance()->AddSocketMsg(SF_GameGate, - socket_handle, - saddr, - p->msgid, - p->seqid, - &buf[offset + sizeof(f8::PackHead)], - p->packlen); + f8::App::Instance()->AddSocketMsg + (SF_GameGate, + socket_handle, + saddr, + p->msgid, + p->seqid, + &buf[offset + sizeof(f8::PackHead)], + p->packlen); offset += sizeof(f8::PackHead) + p->packlen; } else { warning = true; diff --git a/server/masterserver/app.cc b/server/masterserver/app.cc index b9bec93..d4be168 100755 --- a/server/masterserver/app.cc +++ b/server/masterserver/app.cc @@ -1,11 +1,5 @@ #include "precompile.h" -#include -#include -#include -#include -#include - #include #include @@ -22,18 +16,6 @@ #include "ss_msgid.pb.h" #include "ss_proto.pb.h" -struct MsgNode -{ - SocketFrom_e sockfrom; - int sockhandle; - unsigned short msgid; - unsigned int seqid; - long ip_saddr; - char* buf; - int buflen; - MsgNode* next; -}; - static void SavePerfLog() { f8::UdpLog::Instance()->Info("max_mainloop_rundelay:%d", @@ -51,8 +33,6 @@ const std::string App::GetPkgName() void App::Init() { - msg_mutex_ = std::make_shared(); - HandlerMgr::Instance()->Init(); JsonDataMgr::Instance()->Init(); GGListener::Instance()->Init(); @@ -88,43 +68,8 @@ void App::Update() SlowerExecute(); } -void App::AddSocketMsg(SocketFrom_e sockfrom, - int sockhandle, - long ip_saddr, - unsigned short msgid, - unsigned int seqid, - const char *msgbody, - int bodylen) -{ - MsgNode *p = (MsgNode*) malloc(sizeof(MsgNode)); - memset(p, 0, sizeof(MsgNode)); - p->sockfrom = sockfrom; - p->ip_saddr = ip_saddr; - p->sockhandle = sockhandle; - p->msgid = msgid; - p->seqid = seqid; - p->buf = nullptr; - p->buflen = bodylen; - if (bodylen > 0) { - p->buf = (char*)malloc(bodylen); - memmove(p->buf, msgbody, bodylen); - } - msg_mutex_->lock(); - if (bot_node_) { - bot_node_->next = p; - bot_node_ = p; - } else { - top_node_ = p; - bot_node_ = p; - } - ++msgnode_size_; - msg_mutex_->unlock(); - f8::App::Instance()->NotifyLoopCond(); -} - void App::QuickExecute() { - DispatchMsg(); } void App::SlowerExecute() @@ -133,78 +78,31 @@ void App::SlowerExecute() bool App::HasTask() { - { - if (!work_node_) { - msg_mutex_->lock(); - if (!work_node_ && top_node_) { - work_node_ = top_node_; - top_node_ = nullptr; - bot_node_ = nullptr; - } - msg_mutex_->unlock(); - } - if (work_node_) { - return true; - } - } return false; } -void App::DispatchMsg() -{ - long long starttick = a8::XGetTickCount(); - if (!work_node_ && top_node_) { - msg_mutex_->lock(); - work_node_ = top_node_; - top_node_ = nullptr; - bot_node_ = nullptr; - working_msgnode_size_ = msgnode_size_; - msg_mutex_->unlock(); - } - - f8::MsgHdr hdr; - while (work_node_) { - MsgNode *pdelnode = work_node_; - work_node_ = pdelnode->next; - hdr.msgid = pdelnode->msgid; - hdr.seqid = pdelnode->seqid; - hdr.socket_handle = pdelnode->sockhandle; - hdr.buf = pdelnode->buf; - hdr.buflen = pdelnode->buflen; - hdr.offset = 0; - hdr.ip_saddr = pdelnode->ip_saddr; - switch (pdelnode->sockfrom) { - case SF_GameGate: - { - ProcessGameGateMsg(hdr); - } - break; - } - if (pdelnode->buf) { - free(pdelnode->buf); - } - free(pdelnode); - working_msgnode_size_--; - if (a8::XGetTickCount() - starttick > 200) { - break; - } - }//end while - - if (!work_node_) { - working_msgnode_size_ = 0; - } -} - -void App::ProcessGameGateMsg(f8::MsgHdr& hdr) +void App::ProcessGameGateMsg(f8::MsgHdr* hdr) { f8::NetMsgHandler* handler = f8::GetNetMsgHandler (&HandlerMgr::Instance()->ggmsghandler, - hdr.msgid); + hdr->msgid); if (handler) { switch (handler->handlerid) { case HID_GSMgr: - ProcessNetMsg(handler, GSMgr::Instance(), hdr); + ProcessNetMsg(handler, GSMgr::Instance(), *hdr); break; } } } + +void App::DispatchSocketMsg(f8::MsgHdr* hdr) +{ + switch (hdr->sockfrom) { + case SF_GameGate: + { + ProcessGameGateMsg(hdr); + } + break; + } + f8::App::Instance()->FreeSocketMsg(hdr); +} diff --git a/server/masterserver/app.h b/server/masterserver/app.h index a66fcbe..1c9e907 100644 --- a/server/masterserver/app.h +++ b/server/masterserver/app.h @@ -4,6 +4,11 @@ #include +namespace f8 +{ + struct MsgHdr; +} + struct MsgNode; class App : public a8::Singleton, public f8::UserApp { @@ -18,33 +23,14 @@ public: virtual void UnInit() override; virtual void Update() override; virtual bool HasTask() override; - - void AddSocketMsg(SocketFrom_e sockfrom, - int sockhandle, - long ip_saddr, - unsigned short msgid, - unsigned int seqid, - const char *msgbody, - int bodylen); + virtual void DispatchSocketMsg(f8::MsgHdr* hdr) override; private: void QuickExecute(); void SlowerExecute(); - void DispatchMsg(); - - void ProcessGameGateMsg(f8::MsgHdr& hdr); + void ProcessGameGateMsg(f8::MsgHdr* hdr); public: PerfMonitor perf; - -private: - - std::shared_ptr msg_mutex_; - MsgNode* top_node_ = nullptr; - MsgNode* bot_node_ = nullptr; - MsgNode* work_node_ = nullptr; - - int msgnode_size_ = 0 ; - int working_msgnode_size_ = 0; }; diff --git a/third_party/a8 b/third_party/a8 index 987da1b..88c5624 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit 987da1b7c3e110bf15c78a28820224761c65fd39 +Subproject commit 88c56243345966d1384df0a2890e326290b97b9e