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,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;

View File

@ -1,11 +1,5 @@
#include "precompile.h"
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <mutex>
#include <condition_variable>
#include <a8/uuid.h>
#include <f8/netmsghandler.h>
@ -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<std::mutex>();
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);
}

View File

@ -4,6 +4,11 @@
#include <f8/app.h>
namespace f8
{
struct MsgHdr;
}
struct MsgNode;
class App : public a8::Singleton<App>, 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<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