This commit is contained in:
azw 2023-04-17 11:02:08 +00:00
parent 10d34b25ce
commit 393bdfff49

View File

@ -129,8 +129,20 @@ class KcpSession
{
public:
void Init(int socket_handle, a8::UdpPacket* pkt)
static int UdpOutput(const char *buf, int len, ikcpcb *kcp, void *user)
{
KcpSession* session = (KcpSession*)user;
a8::UdpPacket* pkt = new a8::UdpPacket();
pkt->buf = buf;
pkt->buf_len = len;
pkt->remote_addr = session->remote_addr_;
session->udp_listener_->SendUdpPacket(pkt);
return 0;
}
void Init(a8::UdpListener* udp_listener, int socket_handle, a8::UdpPacket* pkt)
{
udp_listener_ = udp_listener;
remote_key_ = pkt->GetRemoteKey();
remote_addr_ = pkt->remote_addr;
socket_handle_ = socket_handle;
@ -139,6 +151,7 @@ public:
ikcp_nodelay(kcp_, 2, 10, 2, 1);
kcp_->rx_minrto = 10;
kcp_->fastresend = 1;
kcp_->output = KcpSession::UdpOutput;
}
void UnInit()
@ -149,6 +162,11 @@ public:
}
}
void Update()
{
}
void SendMsg(unsigned short msgid, const ::google::protobuf::Message& msg)
{
@ -160,6 +178,7 @@ public:
}
private:
a8::UdpListener* udp_listener_ = nullptr;
ikcpcb* kcp_ = nullptr;
int socket_handle_ = 0;
long long remote_key_ = 0;
@ -262,7 +281,7 @@ void GCListener::ProcUdpPacket(a8::UdpPacket* pkt)
if (!session) {
++kcp_socket_handle_;
session = std::make_shared<KcpSession>();
session->Init(kcp_socket_handle_, pkt);
session->Init(udp_listener_.get(), kcp_socket_handle_, pkt);
kcp_session_addr_hash_[key] = session;
kcp_session_handle_hash_[kcp_socket_handle_] = session;
}