From adfa92a169179e8ae341b0bc15d24c85608d688b Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 05:59:41 +0000 Subject: [PATCH 01/16] 1 --- server/tools/protobuild/ss_proto.proto | 5 +++++ server/wsproxy/downstream.cc | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 28d3de4..7b6952f 100644 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -8,6 +8,11 @@ message SS_CMPing { } +message SS_SMPing +{ + optional int32 param1 = 1; optional int32 source = 2 [default = 0]; //0:tcp 1:udp +} + message SS_CMLogin_CMReConnect_CommonHead { optional int32 server_id = 1; diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index 868a806..f3aab6e 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -57,11 +57,15 @@ void DownStream::OnClose() void DownStream::ProcCMMsg(f8::MsgHdr& hdr, int tag) { - if (hdr.msgid == ss::_SS_CMPing && IsLongSession() && tag == ST_Tcp) { + if (hdr.msgid == ss::_SS_CMPing) { ss::SS_Ping msg; - GCListener::Instance()->SendMsgEx(socket_handle_, ss::_SS_CMPing, msg); - if (!long_session_wp_.expired()) { - long_session_wp_.lock()->UpdatePing(); + if (IsLongSession() && tag == ST_Tcp) { + GCListener::Instance()->SendMsgEx(socket_handle_, ss::_SS_CMPing, msg); + if (!long_session_wp_.expired()) { + long_session_wp_.lock()->UpdatePing(); + } + } else { + } return; } From d7ea1075ab71236b5cfc55734b35c058ce3532b0 Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 06:06:51 +0000 Subject: [PATCH 02/16] 1 --- server/wsproxy/downstream.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index f3aab6e..d5a9af1 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -58,14 +58,16 @@ void DownStream::OnClose() void DownStream::ProcCMMsg(f8::MsgHdr& hdr, int tag) { if (hdr.msgid == ss::_SS_CMPing) { - ss::SS_Ping msg; + ss::SS_SMPing msg; if (IsLongSession() && tag == ST_Tcp) { GCListener::Instance()->SendMsgEx(socket_handle_, ss::_SS_CMPing, msg); if (!long_session_wp_.expired()) { long_session_wp_.lock()->UpdatePing(); } } else { - + if (!long_session_wp_.expired()) { + msg.set_source(1); + } } return; } From 86a709acbfc03dcd120cf493e4e5203658454c13 Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 06:26:22 +0000 Subject: [PATCH 03/16] 1 --- server/wsproxy/downstream.cc | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index d5a9af1..8c409f2 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -37,7 +37,25 @@ void DownStream::ForwardUpStreamMsg(f8::MsgHdr& hdr) } if (auto long_session = long_session_wp_.lock(); !long_session_wp_.expired()) { - long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); + if (hdr.msgid == ss::_SS_CMPing) { + ss::SS_SMPing msg; + msg.set_source(1); + { + free(buff); + + buff = (char*)malloc(sizeof(f8::PackHead) + msg.ByteSize()); + f8::PackHead* head = (f8::PackHead*)buff; + head->packlen = msg.ByteSize(); + head->msgid = hdr.msgid; + head->seqid = hdr.seqid; + head->magic_code = f8::MAGIC_CODE; + head->ext_len = hdr.buflen >> 16; + msg.SerializeToArray(buff + sizeof(f8::PackHead), head->packlen); + } + long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); + } else { + long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); + } } else { GCListener::Instance()->SendBuf(hdr.socket_handle, buff, sizeof(f8::PackHead) + head->packlen); } @@ -57,17 +75,11 @@ void DownStream::OnClose() void DownStream::ProcCMMsg(f8::MsgHdr& hdr, int tag) { - if (hdr.msgid == ss::_SS_CMPing) { + if (hdr.msgid == ss::_SS_CMPing && IsLongSession() && tag == ST_Tcp) { ss::SS_SMPing msg; - if (IsLongSession() && tag == ST_Tcp) { - GCListener::Instance()->SendMsgEx(socket_handle_, ss::_SS_CMPing, msg); - if (!long_session_wp_.expired()) { - long_session_wp_.lock()->UpdatePing(); - } - } else { - if (!long_session_wp_.expired()) { - msg.set_source(1); - } + GCListener::Instance()->SendMsgEx(socket_handle_, ss::_SS_CMPing, msg); + if (!long_session_wp_.expired()) { + long_session_wp_.lock()->UpdatePing(); } return; } From 9f7276a776fb350b585545c9f5108901cedc3899 Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 07:00:25 +0000 Subject: [PATCH 04/16] 1 --- server/wsproxy/GCListener.cc | 5 +++++ server/wsproxy/GCListener.h | 1 + server/wsproxy/app.cc | 6 ++++-- server/wsproxy/longsessionmgr.cc | 5 +++++ server/wsproxy/longsessionmgr.h | 1 + 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/server/wsproxy/GCListener.cc b/server/wsproxy/GCListener.cc index d3c3220..0fe6f27 100644 --- a/server/wsproxy/GCListener.cc +++ b/server/wsproxy/GCListener.cc @@ -193,3 +193,8 @@ bool GCListener::GetWebSocketUrl(int socket_handle, std::string& url, std::strin return false; } } + +int GCListener::GetSocketCount() +{ + return tcp_listener_->GetClientSocketCount(); +} diff --git a/server/wsproxy/GCListener.h b/server/wsproxy/GCListener.h index 4aa30d5..dd3bfd7 100644 --- a/server/wsproxy/GCListener.h +++ b/server/wsproxy/GCListener.h @@ -40,6 +40,7 @@ class GCListener : public a8::Singleton long long GetSendNodeNum(); long long GetSentBytesNum(); bool GetWebSocketUrl(int socket_handle, std::string& url, std::string& query_str); + int GetSocketCount(); private: a8::TcpListener *tcp_listener_ = nullptr; diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index 3c99376..6b47615 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -55,10 +55,10 @@ const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log"; static void SavePerfLog() { - f8::UdpLog::Instance()->Info(" max_run_delay_time:%d max_timer_idle:%d " + f8::UdpLog::Instance()->Info("max_run_delay_time:%d max_timer_idle:%d " "in_data_size:%d out_data_size:%d msgnode_size:%d udp_msgnode_size:%d " "read_count:%d max_login_time:%d " - "max_join_time:%d", + "max_join_time:%d tcp_count:%d udp_count:%d", { App::Instance()->GetPerf().max_run_delay_time, App::Instance()->GetPerf().max_timer_idle, @@ -69,6 +69,8 @@ static void SavePerfLog() App::Instance()->GetPerf().read_count, App::Instance()->GetPerf().max_login_time, App::Instance()->GetPerf().max_join_time, + GCListener::Instance()->GetSocketCount(), + LongSessionMgr::Instance()->GetLongSessionCount() }); if (App::Instance()->HasFlag(2)) { a8::XPrintf("mainloop_time:%d netmsg_time:%d send_node_num:%d sent_bytes_num:%d\n", diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 3915a67..405c2a5 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -126,3 +126,8 @@ void LongSessionMgr::DelSession(int socket_handle) } socket_handle_hash_.erase(socket_handle); } + +int LongSessionMgr::GetLongSessionCount() +{ + return socket_handle_hash_.size(); +} diff --git a/server/wsproxy/longsessionmgr.h b/server/wsproxy/longsessionmgr.h index 0be1d50..4595195 100644 --- a/server/wsproxy/longsessionmgr.h +++ b/server/wsproxy/longsessionmgr.h @@ -31,6 +31,7 @@ class LongSessionMgr : public a8::Singleton std::shared_ptr GetSession(int socket_handle); std::shared_ptr GetUdpListener() { return udp_listener_; } void DelSession(int socket_handle); + int GetLongSessionCount(); private: std::shared_ptr udp_listener_; From 6b36492bb1f79e09e7d2b0b71e60f6a9dc5b96c2 Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 08:19:40 +0000 Subject: [PATCH 05/16] 1 --- server/wsproxy/longsessionmgr.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 405c2a5..1c1dfcc 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -83,7 +83,7 @@ void LongSessionMgr::_SS_CMKcpHandshake(f8::MsgHdr& hdr, const ss::SS_CMKcpHands [this, socket_handle] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { - if (DownStreamMgr::Instance()->GetDownStream(socket_handle).expired()) { + if (!DownStreamMgr::Instance()->GetDownStream(socket_handle).expired()) { GCListener::Instance()->ForceCloseClient(socket_handle); } } From a4e1fbd27e23f91c979f0ab8cef6b23b4bd5d29a Mon Sep 17 00:00:00 2001 From: azw Date: Tue, 25 Apr 2023 08:54:58 +0000 Subject: [PATCH 06/16] 1 --- server/wsproxy/longsessionmgr.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 1c1dfcc..405c2a5 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -83,7 +83,7 @@ void LongSessionMgr::_SS_CMKcpHandshake(f8::MsgHdr& hdr, const ss::SS_CMKcpHands [this, socket_handle] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { - if (!DownStreamMgr::Instance()->GetDownStream(socket_handle).expired()) { + if (DownStreamMgr::Instance()->GetDownStream(socket_handle).expired()) { GCListener::Instance()->ForceCloseClient(socket_handle); } } From 9fb8c7c51a6133769a1f14e9bd52e8d8e8221433 Mon Sep 17 00:00:00 2001 From: azw Date: Wed, 26 Apr 2023 06:58:30 +0000 Subject: [PATCH 07/16] 1 --- server/wsproxy/app.cc | 5 +++-- server/wsproxy/downstreammgr.cc | 5 +++++ server/wsproxy/downstreammgr.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index 6b47615..431ae8d 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -58,7 +58,7 @@ static void SavePerfLog() f8::UdpLog::Instance()->Info("max_run_delay_time:%d max_timer_idle:%d " "in_data_size:%d out_data_size:%d msgnode_size:%d udp_msgnode_size:%d " "read_count:%d max_login_time:%d " - "max_join_time:%d tcp_count:%d udp_count:%d", + "max_join_time:%d tcp_count:%d udp_count:%d down_stream_count:%d", { App::Instance()->GetPerf().max_run_delay_time, App::Instance()->GetPerf().max_timer_idle, @@ -70,7 +70,8 @@ static void SavePerfLog() App::Instance()->GetPerf().max_login_time, App::Instance()->GetPerf().max_join_time, GCListener::Instance()->GetSocketCount(), - LongSessionMgr::Instance()->GetLongSessionCount() + LongSessionMgr::Instance()->GetLongSessionCount(), + DownStreamMgr::Instance()->GetDownStreamCount() }); if (App::Instance()->HasFlag(2)) { a8::XPrintf("mainloop_time:%d netmsg_time:%d send_node_num:%d sent_bytes_num:%d\n", diff --git a/server/wsproxy/downstreammgr.cc b/server/wsproxy/downstreammgr.cc index 531acc7..ef99152 100644 --- a/server/wsproxy/downstreammgr.cc +++ b/server/wsproxy/downstreammgr.cc @@ -152,3 +152,8 @@ void DownStreamMgr::RemovePendingAccount(int socket_handle) pending_account_hash_.erase(itr); } } + +int DownStreamMgr::GetDownStreamCount() +{ + return socket_hash_.size(); +} diff --git a/server/wsproxy/downstreammgr.h b/server/wsproxy/downstreammgr.h index 55dd8dc..09c8dcd 100644 --- a/server/wsproxy/downstreammgr.h +++ b/server/wsproxy/downstreammgr.h @@ -20,6 +20,7 @@ class DownStreamMgr : public a8::Singleton std::weak_ptr GetDownStream(int sockhande); void BindUpStream(int socket_handle, int instance_id); void AddPendingAccount(const std::string& account_id, int socket_handle, long long req_tick); + int GetDownStreamCount(); private: From ccacf371bf43c3b42759008af60dc86b77f3fd4a Mon Sep 17 00:00:00 2001 From: azw Date: Wed, 26 Apr 2023 07:56:25 +0000 Subject: [PATCH 08/16] 1 --- server/wsproxy/longsessionmgr.cc | 46 +++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 405c2a5..3869243 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -100,14 +100,54 @@ std::shared_ptr LongSessionMgr::GetSession(int socket_handle) void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt) { + f8::UdpLog::Instance()->Debug("ProcUdpPacket host:%s port:%d buflen:%d", + { + inet_ntoa(pkt->remote_addr.sin_addr), + pkt->remote_addr.sin_port, + pkt->buf_len + }); const int IKCP_OVERHEAD = 24; + + if (pkt->buf_len < IKCP_OVERHEAD) { + f8::UdpLog::Instance()->Warning("ProcUdpPacket host:%s port:%d buflen:%d over_head_error", + { + inet_ntoa(pkt->remote_addr.sin_addr), + pkt->remote_addr.sin_port, + pkt->buf_len + }); + return; + } + int socket_handle = ikcp_getconv(pkt->buf); + auto session = GetSession(socket_handle); + if (!session) { + f8::UdpLog::Instance()->Warning("ProcUdpPacket host:%s socket_handle:%d session_error", + { + inet_ntoa(pkt->remote_addr.sin_addr), + pkt->remote_addr.sin_port, + socket_handle + }); + return; + } if (pkt->buf_len > IKCP_OVERHEAD + KcpSession::GetSecretKeyLen()) { - int socket_handle = ikcp_getconv(pkt->buf); long long secret_key = KcpSession::ReadSecretKey(pkt->buf + IKCP_OVERHEAD, pkt->buf_len); - auto session = GetSession(socket_handle); - if (session && secret_key == session->GetKcpSession()->GetSecretKey()) { + if (secret_key == session->GetKcpSession()->GetSecretKey()) { session->GetKcpSession()->OnRecvPacket(pkt); + } else { + f8::UdpLog::Instance()->Warning("ProcUdpPacket host:%s port:%d socket_handle%d secret_key:%d secret_error", + { + inet_ntoa(pkt->remote_addr.sin_addr), + pkt->remote_addr.sin_port, + socket_handle, + secret_key + }); } + } else { + f8::UdpLog::Instance()->Warning("ProcUdpPacket host:%s port:%d buflen:%d bufflen_error", + { + inet_ntoa(pkt->remote_addr.sin_addr), + pkt->remote_addr.sin_port, + pkt->buf_len + }); } } From 3641e6f4c6dd85f0e83b38595cc91a756ee9e55c Mon Sep 17 00:00:00 2001 From: azw Date: Wed, 26 Apr 2023 08:15:22 +0000 Subject: [PATCH 09/16] 1 --- server/wsproxy/kcpsession.cc | 7 ++++++- server/wsproxy/longsessionmgr.cc | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/wsproxy/kcpsession.cc b/server/wsproxy/kcpsession.cc index efe4b3d..3010fc3 100644 --- a/server/wsproxy/kcpsession.cc +++ b/server/wsproxy/kcpsession.cc @@ -95,12 +95,17 @@ void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen) //2 + 2 + 4+ xx + \0 + xx bool warning = false; while (buflen - offset >= sizeof(f8::PackHead) + GetSecretKeyLen()) { + long long secret_key = KcpSession::ReadSecretKey(&buf[offset], buflen); + if (secret_key != secret_key_) { + warning = true; + offset++; + continue; + } f8::PackHead* p = (f8::PackHead*)&buf[offset + GetSecretKeyLen()]; if (p->magic_code == f8::MAGIC_CODE) { if (buflen - offset < sizeof(f8::PackHead) + p->packlen + GetSecretKeyLen()) { break; } - //a8::XPrintf("Recv MsgId:%d\n", {p->msgid}); App::Instance()->AddSocketMsg(SF_Client, socket_handle_, 0, diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 3869243..4a2adac 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -128,6 +128,8 @@ void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt) }); return; } + session->GetKcpSession()->OnRecvPacket(pkt); +#if 0 if (pkt->buf_len > IKCP_OVERHEAD + KcpSession::GetSecretKeyLen()) { long long secret_key = KcpSession::ReadSecretKey(pkt->buf + IKCP_OVERHEAD, pkt->buf_len); if (secret_key == session->GetKcpSession()->GetSecretKey()) { @@ -149,6 +151,7 @@ void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt) pkt->buf_len }); } +#endif } void LongSessionMgr::DelSession(int socket_handle) From 4f4c124f44debafb8b5ae5766ff2740947acd8e5 Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 03:47:34 +0000 Subject: [PATCH 10/16] 1 --- third_party/a8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/a8 b/third_party/a8 index 4fb98b2..f6ee459 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit 4fb98b218b1f30f57bfe63a41f8fcd6d1778fc99 +Subproject commit f6ee4597d810b7b18fbcbd01206b864a10c19ccd From 2b975c2cfb930ab8a0bfa389a596591a652c761a Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 03:53:13 +0000 Subject: [PATCH 11/16] 1 --- third_party/a8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/a8 b/third_party/a8 index f6ee459..a6f06f6 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit f6ee4597d810b7b18fbcbd01206b864a10c19ccd +Subproject commit a6f06f65b286e16310df08720e8698db86f1df36 From 7b8cd6c11bd4199f97f72398fb15bafbb456b5ae Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 06:15:34 +0000 Subject: [PATCH 12/16] 1 --- server/wsproxy/longsessionmgr.cc | 2 ++ third_party/a8 | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index 4a2adac..ff11297 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -100,12 +100,14 @@ std::shared_ptr LongSessionMgr::GetSession(int socket_handle) void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt) { + #if 0 f8::UdpLog::Instance()->Debug("ProcUdpPacket host:%s port:%d buflen:%d", { inet_ntoa(pkt->remote_addr.sin_addr), pkt->remote_addr.sin_port, pkt->buf_len }); + #endif const int IKCP_OVERHEAD = 24; if (pkt->buf_len < IKCP_OVERHEAD) { diff --git a/third_party/a8 b/third_party/a8 index a6f06f6..03f5f63 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit a6f06f65b286e16310df08720e8698db86f1df36 +Subproject commit 03f5f63a42a0a72881d224767791efca437d0611 From 52e3f3300676dc7d38c730fbfd1458ba9205fca1 Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 06:20:38 +0000 Subject: [PATCH 13/16] 1 --- server/wsproxy/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/server/wsproxy/CMakeLists.txt b/server/wsproxy/CMakeLists.txt index 0af43ba..8c3beaf 100644 --- a/server/wsproxy/CMakeLists.txt +++ b/server/wsproxy/CMakeLists.txt @@ -102,7 +102,6 @@ target_link_libraries( curl hiredis tinyxml2 - tcmalloc ) if (CMAKE_BUILD_TYPE STREQUAL "Debug") From 10db780deb4d64ed30f0d69a7194a9de414d305d Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 06:41:08 +0000 Subject: [PATCH 14/16] 1 --- server/wsproxy/downstream.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index 8c409f2..c00e1ff 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -51,8 +51,8 @@ void DownStream::ForwardUpStreamMsg(f8::MsgHdr& hdr) head->magic_code = f8::MAGIC_CODE; head->ext_len = hdr.buflen >> 16; msg.SerializeToArray(buff + sizeof(f8::PackHead), head->packlen); + long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); } - long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); } else { long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); } From 68897846210fc5d1d6a61c3e78f0ea557d7da897 Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 08:59:26 +0000 Subject: [PATCH 15/16] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E9=9C=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/wsproxy/app.cc | 15 ++++++++++++++- server/wsproxy/longsessionmgr.cc | 5 ++++- server/wsproxy/mastermgr.cc | 4 ++++ third_party/a8 | 2 +- third_party/f8 | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index 431ae8d..b45c0e0 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -570,8 +570,14 @@ void App::FreeUdpMsgQueue() } while (udp_work_node_) { UdpMsgNode* pdelnode = udp_work_node_; - delete pdelnode->pkt; udp_work_node_ = udp_work_node_->next; + { + if (pdelnode->pkt->buf) { + free((void*)pdelnode->pkt->buf); + } + delete pdelnode->pkt; + free(pdelnode); + } if (!udp_work_node_) { udp_work_node_ = udp_top_node_; udp_top_node_ = nullptr; @@ -615,6 +621,13 @@ void App::DispatchUdpMsg() UdpMsgNode *pdelnode = udp_work_node_; LongSessionMgr::Instance()->ProcUdpPacket(pdelnode->pkt); udp_work_node_ = pdelnode->next; + { + if (pdelnode->pkt->buf) { + free((void*)pdelnode->pkt->buf); + } + delete pdelnode->pkt; + free(pdelnode); + } udp_working_msgnode_size_--; if (a8::XGetTickCount() - starttick > 200) { break; diff --git a/server/wsproxy/longsessionmgr.cc b/server/wsproxy/longsessionmgr.cc index ff11297..f66d778 100644 --- a/server/wsproxy/longsessionmgr.cc +++ b/server/wsproxy/longsessionmgr.cc @@ -39,7 +39,10 @@ void LongSessionMgr::Init() void LongSessionMgr::UnInit() { - + for (auto& pair : socket_handle_hash_) { + pair.second->UnInit(); + } + socket_handle_hash_.clear(); } void LongSessionMgr::Update() diff --git a/server/wsproxy/mastermgr.cc b/server/wsproxy/mastermgr.cc index 0ed36cc..8049235 100644 --- a/server/wsproxy/mastermgr.cc +++ b/server/wsproxy/mastermgr.cc @@ -48,6 +48,10 @@ void MasterMgr::Init() void MasterMgr::UnInit() { + for (auto& pair : mastersvr_hash_) { + pair.second->UnInit(); + } + mastersvr_hash_.clear(); } void MasterMgr::_SS_MS_ResponseTargetServer(f8::MsgHdr& hdr, const ss::SS_MS_ResponseTargetServer& msg) diff --git a/third_party/a8 b/third_party/a8 index 03f5f63..1e57738 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit 03f5f63a42a0a72881d224767791efca437d0611 +Subproject commit 1e577389c8a2870db9ddbf18577bfca24def049b diff --git a/third_party/f8 b/third_party/f8 index c15cb12..243bbe5 160000 --- a/third_party/f8 +++ b/third_party/f8 @@ -1 +1 @@ -Subproject commit c15cb12a75cdc0e190a76ffa94f88c0ec06eec41 +Subproject commit 243bbe515ef4a01089f9a6cf608c93d4097018de From 90d4fbac8ce653ab8244e55b2578652c5ed4a6da Mon Sep 17 00:00:00 2001 From: azw Date: Thu, 27 Apr 2023 09:16:09 +0000 Subject: [PATCH 16/16] 1 --- server/wsproxy/handlermgr.cc | 20 ++++++++++++++++++++ server/wsproxy/jsondatamgr.cc | 5 +++++ server/wsproxy/jsondatamgr.h | 1 + 3 files changed, 26 insertions(+) diff --git a/server/wsproxy/handlermgr.cc b/server/wsproxy/handlermgr.cc index fdf963c..2f562f5 100644 --- a/server/wsproxy/handlermgr.cc +++ b/server/wsproxy/handlermgr.cc @@ -9,6 +9,7 @@ #include "GCListener.h" #include "mastermgr.h" #include "app.h" +#include "jsondatamgr.h" #include "ss_proto.pb.h" @@ -27,11 +28,30 @@ static void _GMOpsGetNodeId(std::shared_ptr request) request->resp_xobj->SetVal("node_id", App::Instance()->GetNodeId()); } +static void _GMOpsSetKcpSwitch(std::shared_ptr request) +{ + request->resp_xobj->SetVal("errcode", 0); + request->resp_xobj->SetVal("errmsg", ""); + if (request->params->HasKey("open")) { + JsonDataMgr::Instance()->SetKcpSwitch(request->params->At("open")->AsXValue().GetInt()); + } + request->resp_xobj->SetVal("is_open", JsonDataMgr::Instance()->GetKcpConf().open); +} + +static void _GMOpsGetKcpSwitch(std::shared_ptr request) +{ + request->resp_xobj->SetVal("errcode", 0); + request->resp_xobj->SetVal("errmsg", ""); + request->resp_xobj->SetVal("is_open", JsonDataMgr::Instance()->GetKcpConf().open); +} + void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops$selfChecking", _GMOpsSelfChecking); RegisterGMMsgHandler("Ops$getNodeId", _GMOpsGetNodeId); + RegisterGMMsgHandler("Ops$setKcpSwitch", _GMOpsSetKcpSwitch); + RegisterGMMsgHandler("Ops$getKcpSwitch", _GMOpsGetKcpSwitch); f8::MsgQueue::Instance()->RegisterCallBack ( IM_ExecGM, diff --git a/server/wsproxy/jsondatamgr.cc b/server/wsproxy/jsondatamgr.cc index 970e2b7..486e933 100644 --- a/server/wsproxy/jsondatamgr.cc +++ b/server/wsproxy/jsondatamgr.cc @@ -108,3 +108,8 @@ void JsonDataMgr::TraverseMaster(std::function cb) cb(instance_id, remote_ip, remote_port); } } + +void JsonDataMgr::SetKcpSwitch(int is_open) +{ + kcp_conf_.open = is_open ? 1 : 0; +} diff --git a/server/wsproxy/jsondatamgr.h b/server/wsproxy/jsondatamgr.h index 66bb92d..a2bc1b6 100644 --- a/server/wsproxy/jsondatamgr.h +++ b/server/wsproxy/jsondatamgr.h @@ -33,6 +33,7 @@ class JsonDataMgr : public a8::Singleton std::shared_ptr GetConf(); void TraverseMaster(std::function cb); const KcpConf& GetKcpConf() { return kcp_conf_; } + void SetKcpSwitch(int is_open); private: std::string work_path_ = "../config";