This commit is contained in:
azw 2023-09-27 15:16:15 +00:00
parent d37ea3972e
commit 844f13f119
4 changed files with 31 additions and 146 deletions

View File

@ -28,7 +28,8 @@ public:
if (buflen - offset < sizeof(f8::PackHead) + p->packlen) { if (buflen - offset < sizeof(f8::PackHead) + p->packlen) {
break; break;
} }
App::Instance()->AddSocketMsg(SF_GameGate, f8::App::Instance()->AddSocketMsg
(SF_GameGate,
socket_handle, socket_handle,
saddr, saddr,
p->msgid, p->msgid,

View File

@ -1,11 +1,5 @@
#include "precompile.h" #include "precompile.h"
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <mutex>
#include <condition_variable>
#include <a8/uuid.h> #include <a8/uuid.h>
#include <f8/netmsghandler.h> #include <f8/netmsghandler.h>
@ -22,18 +16,6 @@
#include "ss_msgid.pb.h" #include "ss_msgid.pb.h"
#include "ss_proto.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() static void SavePerfLog()
{ {
f8::UdpLog::Instance()->Info("max_mainloop_rundelay:%d", f8::UdpLog::Instance()->Info("max_mainloop_rundelay:%d",
@ -51,8 +33,6 @@ const std::string App::GetPkgName()
void App::Init() void App::Init()
{ {
msg_mutex_ = std::make_shared<std::mutex>();
HandlerMgr::Instance()->Init(); HandlerMgr::Instance()->Init();
JsonDataMgr::Instance()->Init(); JsonDataMgr::Instance()->Init();
GGListener::Instance()->Init(); GGListener::Instance()->Init();
@ -88,43 +68,8 @@ void App::Update()
SlowerExecute(); 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() void App::QuickExecute()
{ {
DispatchMsg();
} }
void App::SlowerExecute() void App::SlowerExecute()
@ -133,78 +78,31 @@ void App::SlowerExecute()
bool App::HasTask() 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; return false;
} }
void App::DispatchMsg() void App::ProcessGameGateMsg(f8::MsgHdr* hdr)
{ {
long long starttick = a8::XGetTickCount(); f8::NetMsgHandler* handler = f8::GetNetMsgHandler
if (!work_node_ && top_node_) { (&HandlerMgr::Instance()->ggmsghandler,
msg_mutex_->lock(); hdr->msgid);
work_node_ = top_node_; if (handler) {
top_node_ = nullptr; switch (handler->handlerid) {
bot_node_ = nullptr; case HID_GSMgr:
working_msgnode_size_ = msgnode_size_; ProcessNetMsg(handler, GSMgr::Instance(), *hdr);
msg_mutex_->unlock(); break;
}
}
} }
f8::MsgHdr hdr; void App::DispatchSocketMsg(f8::MsgHdr* hdr)
while (work_node_) { {
MsgNode *pdelnode = work_node_; switch (hdr->sockfrom) {
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: case SF_GameGate:
{ {
ProcessGameGateMsg(hdr); ProcessGameGateMsg(hdr);
} }
break; break;
} }
if (pdelnode->buf) { f8::App::Instance()->FreeSocketMsg(hdr);
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)
{
f8::NetMsgHandler* handler = f8::GetNetMsgHandler
(&HandlerMgr::Instance()->ggmsghandler,
hdr.msgid);
if (handler) {
switch (handler->handlerid) {
case HID_GSMgr:
ProcessNetMsg(handler, GSMgr::Instance(), hdr);
break;
}
}
} }

View File

@ -4,6 +4,11 @@
#include <f8/app.h> #include <f8/app.h>
namespace f8
{
struct MsgHdr;
}
struct MsgNode; struct MsgNode;
class App : public a8::Singleton<App>, public f8::UserApp class App : public a8::Singleton<App>, public f8::UserApp
{ {
@ -18,33 +23,14 @@ public:
virtual void UnInit() override; virtual void UnInit() override;
virtual void Update() override; virtual void Update() override;
virtual bool HasTask() override; virtual bool HasTask() override;
virtual void DispatchSocketMsg(f8::MsgHdr* hdr) override;
void AddSocketMsg(SocketFrom_e sockfrom,
int sockhandle,
long ip_saddr,
unsigned short msgid,
unsigned int seqid,
const char *msgbody,
int bodylen);
private: private:
void QuickExecute(); void QuickExecute();
void SlowerExecute(); void SlowerExecute();
void DispatchMsg(); void ProcessGameGateMsg(f8::MsgHdr* hdr);
void ProcessGameGateMsg(f8::MsgHdr& hdr);
public: public:
PerfMonitor perf; PerfMonitor perf;
private:
std::shared_ptr<std::mutex> msg_mutex_;
MsgNode* top_node_ = nullptr;
MsgNode* bot_node_ = nullptr;
MsgNode* work_node_ = nullptr;
int msgnode_size_ = 0 ;
int working_msgnode_size_ = 0;
}; };

2
third_party/a8 vendored

@ -1 +1 @@
Subproject commit 987da1b7c3e110bf15c78a28820224761c65fd39 Subproject commit 88c56243345966d1384df0a2890e326290b97b9e