From 52188b8ada8521b84dbff9ff6b7dee0549258523 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 24 Apr 2023 11:51:40 +0800 Subject: [PATCH] 1 --- server/wsproxy/downstream.cc | 10 +++++----- server/wsproxy/downstream.h | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index 357cb02..a9313e4 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -13,6 +13,8 @@ void DownStream::Init(int socket_handle, std::weak_ptr up) { socket_handle_ = socket_handle; up_ = up; + long_session_wp_ = LongSessionMgr::Instance()->GetSession(socket_handle_); + is_long_session_ = !long_session_wp_.expired(); } void DownStream::ReBindUpStream(std::weak_ptr up) @@ -33,9 +35,8 @@ void DownStream::ForwardUpStreamMsg(f8::MsgHdr& hdr) memmove(buff + sizeof(f8::PackHead), hdr.buf, hdr.buflen); } - auto session = LongSessionMgr::Instance()->GetSession(hdr.socket_handle); - if (session) { - session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); + if (auto long_session = long_session_wp_.lock(); !long_session_wp_.expired()) { + long_session->GetKcpSession()->SendClientMsg(buff, sizeof(f8::PackHead) + head->packlen); } else { GCListener::Instance()->SendBuf(hdr.socket_handle, buff, sizeof(f8::PackHead) + head->packlen); } @@ -48,8 +49,7 @@ void DownStream::OnClose() ss::SS_WSP_SocketDisconnect msg; GetUpStream().lock()->SendMsg(socket_handle_, msg); } - auto session = LongSessionMgr::Instance()->GetSession(socket_handle_); - if (session) { + if (auto long_session = long_session_wp_.lock(); !long_session_wp_.expired()) { } else { diff --git a/server/wsproxy/downstream.h b/server/wsproxy/downstream.h index 8a921a2..20975e8 100644 --- a/server/wsproxy/downstream.h +++ b/server/wsproxy/downstream.h @@ -1,6 +1,7 @@ #pragma once class UpStream; +class LongSession; class DownStream { public: @@ -17,4 +18,6 @@ class DownStream private: int socket_handle_ = a8::INVALID_SOCKET_HANDLE; std::weak_ptr up_; + bool is_long_session_ = false; + std::weak_ptr long_session_wp_; };