This commit is contained in:
aozhiwei 2022-12-17 11:01:02 +08:00
parent c33414a82d
commit 0bed23cde9
4 changed files with 39 additions and 140 deletions

View File

@ -57,21 +57,30 @@ public:
virtual void OnRawHttpGet(const std::string& url, const std::string& querystr, virtual void OnRawHttpGet(const std::string& url, const std::string& querystr,
std::string& response) override std::string& response) override
{ {
App::Instance()->AddIMMsg(IM_ExecGM, f8::MsgQueue::Instance()->PostMsg
a8::XParams() (IM_ExecGM,
.SetSender(socket_handle) a8::Args
.SetParam1(url) (
.SetParam2(querystr) {
.SetParam3(saddr) socket_handle,
); url,
querystr,
saddr
}
));
} }
virtual void OnDisConnect() override virtual void OnDisConnect() override
{ {
App::Instance()->AddIMMsg(IM_ClientSocketDisconnect, f8::MsgQueue::Instance()->PostMsg
a8::XParams() (IM_ClientSocketDisconnect,
.SetSender(socket_handle) a8::Args
.SetParam1(1)); (
{
socket_handle,
1
}
));
} }
}; };
@ -85,10 +94,14 @@ static void CreateGameClientSocket(a8::TcpSession **p)
static void GSListeneron_error(a8::TcpListener*, int type, int errorid) static void GSListeneron_error(a8::TcpListener*, int type, int errorid)
{ {
f8::UdpLog::Instance()->Debug("GGListeneron_error %d %d", {type, errorid}); f8::UdpLog::Instance()->Debug("GGListeneron_error %d %d", {type, errorid});
f8::MsgQueue::Instance()->PostMsg_r(IM_GGListenerError, f8::MsgQueue::Instance()->PostMsg
a8::XParams() (IM_GGListenerError,
.SetParam1(errorid) a8::Args
); (
{
errorid
}
));
abort(); abort();
} }
@ -102,11 +115,15 @@ void GGListener::Init()
tcp_listener_->bind_port = JsonDataMgr::Instance()->GetConf()->At("listen_port")->AsXValue(); tcp_listener_->bind_port = JsonDataMgr::Instance()->GetConf()->At("listen_port")->AsXValue();
tcp_listener_->Open(); tcp_listener_->Open();
f8::MsgQueue::Instance()->RegisterCallBack(IM_GGListenerError, f8::MsgQueue::Instance()->RegisterCallBack
[] (const a8::XParams& param) (IM_GGListenerError,
{ [] (const a8::Args& args)
GGListener::Instance()->OnListenError(param.param1); {
}); // 777
#if 0
GGListener::Instance()->OnListenError(param.param1);
#endif
});
} }
void GGListener::UnInit() void GGListener::UnInit()

View File

@ -54,14 +54,6 @@ struct MsgNode
MsgNode* next; MsgNode* next;
}; };
struct IMMsgNode
{
unsigned short msgid;
a8::XParams params;
IMMsgNode* next = nullptr;
};
const char* const PROJ_LOG_ROOT_FMT = "/data/logs/%s/logs"; const char* const PROJ_LOG_ROOT_FMT = "/data/logs/%s/logs";
const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log"; const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log";
@ -217,7 +209,6 @@ bool App::Init(int argc, char* argv[])
loop_mutex_ = new std::mutex(); loop_mutex_ = new std::mutex();
loop_cond_ = new std::condition_variable(); loop_cond_ = new std::condition_variable();
msg_mutex_ = new std::mutex(); msg_mutex_ = new std::mutex();
im_msg_mutex_ = new std::mutex();
srand(time(nullptr)); srand(time(nullptr));
InitLog(); InitLog();
@ -301,8 +292,6 @@ void App::UnInit()
UnInitLog(); UnInitLog();
FreeSocketMsgQueue(); FreeSocketMsgQueue();
FreeIMMsgQueue();
A8_SAFE_DELETE(im_msg_mutex_);
A8_SAFE_DELETE(msg_mutex_); A8_SAFE_DELETE(msg_mutex_);
A8_SAFE_DELETE(loop_cond_); A8_SAFE_DELETE(loop_cond_);
A8_SAFE_DELETE(loop_mutex_); A8_SAFE_DELETE(loop_mutex_);
@ -363,27 +352,9 @@ void App::AddSocketMsg(SocketFrom_e sockfrom,
NotifyLoopCond(); NotifyLoopCond();
} }
void App::AddIMMsg(unsigned short imcmd, a8::XParams params)
{
IMMsgNode *p = new IMMsgNode;
p->msgid = imcmd;
p->params = params;
p->next = nullptr;
im_msg_mutex_->lock();
if (im_bot_node_) {
im_bot_node_->next = p;
im_bot_node_ = p;
} else {
im_top_node_ = p;
im_bot_node_ = p;
}
im_msg_mutex_->unlock();
NotifyLoopCond();
}
void App::QuickExecute(int delta_time) void App::QuickExecute(int delta_time)
{ {
ProcessIMMsg(); f8::MsgQueue::Instance()->Update();
DispatchMsg(); DispatchMsg();
RoomMgr::Instance()->Update(delta_time); RoomMgr::Instance()->Update(delta_time);
a8::Timer::Instance()->Update(); a8::Timer::Instance()->Update();
@ -407,20 +378,6 @@ void App::Schedule()
bool App::HasTask() bool App::HasTask()
{ {
{
if (!im_work_node_) {
im_msg_mutex_->lock();
if (!im_work_node_ && im_top_node_) {
im_work_node_ = im_top_node_;
im_top_node_ = nullptr;
im_bot_node_ = nullptr;
}
im_msg_mutex_->unlock();
}
if (im_work_node_) {
return true;
}
}
{ {
if (!work_node_) { if (!work_node_) {
msg_mutex_->lock(); msg_mutex_->lock();
@ -525,47 +482,6 @@ void App::ProcessGameGateMsg(f8::MsgHdr& hdr)
} }
} }
void App::ProcessIMMsg()
{
if (!im_work_node_ && im_top_node_) {
im_msg_mutex_->lock();
im_work_node_ = im_top_node_;
im_top_node_ = nullptr;
im_bot_node_ = nullptr;
im_msg_mutex_->unlock();
}
while (im_work_node_) {
IMMsgNode *pdelnode = im_work_node_;
switch (im_work_node_->msgid) {
case f8::IM_SysMsgQueue:
{
const a8::XParams* param = (const a8::XParams*)pdelnode->params.param1.GetUserData();
f8::MsgQueue::Instance()->ProcessMsg(pdelnode->params.sender.GetInt(),
*param
);
delete param;
}
break;
case IM_ClientSocketDisconnect:
{
PlayerMgr::Instance()->OnClientDisconnect(pdelnode->params);
}
break;
case IM_ExecGM:
{
HandlerMgr::Instance()->ProcGMMsg(pdelnode->params.param3,
pdelnode->params.sender,
pdelnode->params.param1.GetString(),
pdelnode->params.param2.GetString()
);
}
break;
}
im_work_node_ = im_work_node_->next;
delete pdelnode;
}
}
void App::InitLog() void App::InitLog()
{ {
std::string filename_fmt = PROJ_LOG_FILENAME_FMT; std::string filename_fmt = PROJ_LOG_FILENAME_FMT;
@ -686,31 +602,6 @@ void App::FreeSocketMsgQueue()
msg_mutex_->unlock(); msg_mutex_->unlock();
} }
void App::FreeIMMsgQueue()
{
im_msg_mutex_->lock();
if (!im_work_node_) {
im_work_node_ = im_top_node_;
im_top_node_ = nullptr;
im_bot_node_ = nullptr;
}
while (im_work_node_) {
IMMsgNode* pdelnode = im_work_node_;
im_work_node_ = im_work_node_->next;
if (pdelnode->msgid == f8::IM_SysMsgQueue) {
a8::XParams* param = (a8::XParams*)pdelnode->params.param1.GetUserData();
delete param;
}
delete pdelnode;
if (!im_work_node_) {
im_work_node_ = im_top_node_;
im_top_node_ = nullptr;
im_bot_node_ = nullptr;
}
}
im_msg_mutex_->unlock();
}
long long App::AllocTempHeroUniId() long long App::AllocTempHeroUniId()
{ {
if (curr_uniid_ < 1000) { if (curr_uniid_ < 1000) {

View File

@ -6,7 +6,6 @@
#include <f8/protoutils.h> #include <f8/protoutils.h>
struct MsgNode; struct MsgNode;
struct IMMsgNode;
class App : public a8::Singleton<App> class App : public a8::Singleton<App>
{ {
private: private:
@ -30,7 +29,6 @@ public:
unsigned int seqid, unsigned int seqid,
const char *msgbody, const char *msgbody,
int bodylen); int bodylen);
void AddIMMsg(unsigned short imcmd, a8::XParams params);
void NotifyLoopCond(); void NotifyLoopCond();
@ -51,7 +49,6 @@ private:
bool HasTask(); bool HasTask();
void DispatchMsg(); void DispatchMsg();
void ProcessIMMsg();
void ProcessGameGateMsg(f8::MsgHdr& hdr); void ProcessGameGateMsg(f8::MsgHdr& hdr);
@ -60,7 +57,6 @@ private:
bool ParseOpt(); bool ParseOpt();
void FreeSocketMsgQueue(); void FreeSocketMsgQueue();
void FreeIMMsgQueue();
public: public:
int argc = 0; int argc = 0;
@ -98,11 +94,6 @@ private:
MsgNode* bot_node_ = nullptr; MsgNode* bot_node_ = nullptr;
MsgNode* work_node_ = nullptr; MsgNode* work_node_ = nullptr;
std::mutex* im_msg_mutex_ = nullptr;
IMMsgNode* im_top_node_ = nullptr;
IMMsgNode* im_bot_node_ = nullptr;
IMMsgNode* im_work_node_ = nullptr;
std::map<long long, a8::XParams> context_hash_; std::map<long long, a8::XParams> context_hash_;
long long curr_uniid_ = 0; long long curr_uniid_ = 0;

2
third_party/f8 vendored

@ -1 +1 @@
Subproject commit 5d7153a5e5404f6cd428fe5644d0c6e046611ab5 Subproject commit db10c37c68a30f1e9d6cbddafa8721e4bccb9676