diff --git a/server/mymangosd/app.cc b/server/mymangosd/app.cc index b4c9592..aab4a98 100644 --- a/server/mymangosd/app.cc +++ b/server/mymangosd/app.cc @@ -12,6 +12,11 @@ const std::string App::GetPkgName() return "mangosd"; } +int App::GetPreprocessThreadNum() +{ + return 1; +} + void App::Init() { diff --git a/server/mymangosd/app.h b/server/mymangosd/app.h index 16fadd4..0672b68 100644 --- a/server/mymangosd/app.h +++ b/server/mymangosd/app.h @@ -8,6 +8,7 @@ class App : public f8::UserApp public: virtual const std::string GetPkgName() override; + virtual int GetPreprocessThreadNum() override; virtual void Init() override; virtual void UnInit() override; virtual void Update(int delta_time) override; diff --git a/third_party/f8/f8/app.cc b/third_party/f8/f8/app.cc index f845f2e..4d7ee27 100644 --- a/third_party/f8/f8/app.cc +++ b/third_party/f8/f8/app.cc @@ -206,8 +206,10 @@ namespace f8 int seqid, const char *msgbody, int bodylen, - unsigned short tag, - std::any* user_data) + const char *playload, + int playload_len, + unsigned short tag + ) { char *p = (char*)malloc(sizeof(MsgHdr) + bodylen); MsgHdr* hdr = (MsgHdr*)p; @@ -215,13 +217,10 @@ namespace f8 hdr->seqid = seqid; hdr->msgid = msgid; hdr->socket_handle = socket_handle; - hdr->buf = p + sizeof(MsgHdr); hdr->buflen = bodylen; - hdr->offset = 0; - hdr->user_data = user_data; hdr->tag = tag; if (bodylen > 0) { - memmove((void*)hdr->buf, msgbody, bodylen); + memmove(p + sizeof(MsgHdr), msgbody, bodylen); } ++msgnode_size_; net_data_queue_.Push(&hdr->entry); @@ -405,6 +404,8 @@ namespace f8 int seqid, const char *msgbody, int bodylen, + const char *playload, + int playload_len, unsigned short tag) { impl_->AddSocketMsg(sockfrom, @@ -413,27 +414,10 @@ namespace f8 seqid, msgbody, bodylen, - tag, - nullptr); - } - - void App::AddSocketMsgAndUserData(unsigned short sockfrom, - long long socket_handle, - int msgid, - int seqid, - const char *msgbody, - int bodylen, - unsigned short tag, - std::any* user_data) - { - impl_->AddSocketMsg(sockfrom, - socket_handle, - msgid, - seqid, - msgbody, - bodylen, - tag, - user_data); + playload, + playload_len, + tag + ); } } diff --git a/third_party/f8/f8/app.h b/third_party/f8/f8/app.h index ef6a3e5..88a1459 100644 --- a/third_party/f8/f8/app.h +++ b/third_party/f8/f8/app.h @@ -29,15 +29,9 @@ namespace f8 int seqid, const char *buf, int buflen, + const char *playload, + int playload_len, unsigned short tag); - void AddSocketMsgAndUserData(unsigned short sockfrom, - long long socket_handle, - int msgid, - int seqid, - const char *buf, - int buflen, - unsigned short tag, - std::any* user_data); char** GetArgv(); int GetArgc(); long long GetMsgNodeSize(); diff --git a/third_party/f8/f8/netmsghandler.cc b/third_party/f8/f8/netmsghandler.cc index a2eed8c..958eb86 100644 --- a/third_party/f8/f8/netmsghandler.cc +++ b/third_party/f8/f8/netmsghandler.cc @@ -20,7 +20,7 @@ namespace f8 { return; ::google::protobuf::Message* msg = handler->prototype->New(); - bool ok = msg->ParseFromArray(hdr.buf + hdr.offset, hdr.buflen - hdr.offset); + bool ok = msg->ParseFromArray(hdr.GetBodyData(), hdr.GetBodyLen()); f8::UdpLog::Instance()->Debug ( "%s%s:%d %s", diff --git a/third_party/f8/f8/netmsghandler.h b/third_party/f8/f8/netmsghandler.h index e6b418b..fccda35 100644 --- a/third_party/f8/f8/netmsghandler.h +++ b/third_party/f8/f8/netmsghandler.h @@ -50,7 +50,7 @@ namespace f8 if (handler->custom_parser) { ok = handler->custom_parser(hdr, &msg); } else { - ok = msg.ParseFromArray(hdr->buf + hdr->offset, hdr->buflen - hdr->offset); + ok = msg.ParseFromArray((char*)hdr + sizeof(MsgHdr), hdr->buflen); } assert(ok); if (ok) { diff --git a/third_party/f8/f8/protoutils.cc b/third_party/f8/f8/protoutils.cc index 2a61a1d..ac11510 100644 --- a/third_party/f8/f8/protoutils.cc +++ b/third_party/f8/f8/protoutils.cc @@ -303,11 +303,30 @@ namespace f8 return sizeof(WSProxyPackHead_S) + packlen; } + char* MsgHdr::GetBodyData() const + { + return (char*)this + sizeof(MsgHdr); + } + + int MsgHdr::GetBodyLen() const + { + return buflen; + } + + char* MsgHdr::GetPlayloadData() const + { + return (char*)this + sizeof(MsgHdr) + GetBodyLen(); + } + + int MsgHdr::GetPlayloadLen() const + { + return payload_buflen; + } + MsgHdr* MsgHdr::Clone() { MsgHdr* hdr = (MsgHdr*)malloc(sizeof(MsgHdr) + buflen); memmove((void*)hdr, (void*)this, sizeof(MsgHdr) + buflen); - hdr->buf = ((char*)hdr) + sizeof(MsgHdr); if (user_data) { hdr->user_data = new(std::any); *hdr->user_data = *user_data; diff --git a/third_party/f8/f8/protoutils.h b/third_party/f8/f8/protoutils.h index 22a39a7..fc7e511 100644 --- a/third_party/f8/f8/protoutils.h +++ b/third_party/f8/f8/protoutils.h @@ -10,21 +10,30 @@ namespace a8 namespace f8 { + class AppImpl; struct MsgHdr { + public: + char* GetBodyData() const; + int GetBodyLen() const; + char* GetPlayloadData() const; + int GetPlayloadLen() const; + + MsgHdr* Clone(); + static void Destroy(MsgHdr* hdr); + + private: + list_head entry; unsigned short sockfrom; unsigned short tag; int seqid; int msgid; long long socket_handle; - const char* buf; - int buflen; - int offset; - list_head entry; - std::any* user_data = nullptr; - MsgHdr* Clone(); - static void Destroy(MsgHdr* hdr); + int buflen; + int payload_buflen; + std::any* user_data; + friend class f8::AppImpl; }; //普通消息头部 diff --git a/third_party/f8/f8/userapp.h b/third_party/f8/f8/userapp.h index 2610461..96cb04a 100644 --- a/third_party/f8/f8/userapp.h +++ b/third_party/f8/f8/userapp.h @@ -8,6 +8,7 @@ namespace f8 { public: virtual const std::string GetPkgName() = 0; + virtual int GetPreprocessThreadNum() = 0; virtual void Init() = 0; virtual void UnInit() = 0; virtual void Update(int delta_time) = 0;