From f856b632bacc1bf3cac2109c9850f85ae79b83ab Mon Sep 17 00:00:00 2001 From: azw Date: Sat, 15 Apr 2023 09:17:46 +0000 Subject: [PATCH] 1 --- server/wsproxy/GCListener.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/server/wsproxy/GCListener.cc b/server/wsproxy/GCListener.cc index 16ec47b..57be7dc 100644 --- a/server/wsproxy/GCListener.cc +++ b/server/wsproxy/GCListener.cc @@ -129,13 +129,26 @@ class KcpSession { public: + void Init(a8::UdpPacket* pkt) + { + remote_key_ = pkt->GetRemoteKey(); + remote_addr_ = pkt->remote_addr; + } + void SendMsg(unsigned short msgid, const ::google::protobuf::Message& msg) { } + void OnRecvPacket(a8::UdpPacket* pkt) + { + + } + private: ikcpcb* kcp_ = nullptr; + long long remote_key_ = 0; + sockaddr_in remote_addr_ = {}; }; static void GSUdpListeneron_error(a8::UdpListener*, int errorid) @@ -145,6 +158,18 @@ static void GSUdpListeneron_error(a8::UdpListener*, int errorid) static void GSUdpListeneron_recv_packet(a8::UdpListener*, a8::UdpPacket* pkt) { + std::shared_ptr session; + GCListener::Instance()->kcp_session_mutex_->lock(); + auto itr = GCListener::Instance()->kcp_session_addr_hash_.find(pkt->GetRemoteKey()); + if (itr == GCListener::Instance()->kcp_session_addr_hash_.end()) { + session = std::make_shared(); + GCListener::Instance()->kcp_session_addr_hash_[pkt->GetRemoteKey()] = session; + session->Init(pkt); + } else { + session = itr->second; + } + GCListener::Instance()->kcp_session_mutex_->unlock(); + session->OnRecvPacket(pkt); } void GCListener::Init()