ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::asio_kcp Class Reference

基于Boost.Asio的UDP套接字KCP收发封装类。 More...

#include <asio_kcp.h>

Public Types

enum  { e_buff_byte = 1500 , e_buffrecv_byte = 10240 , e_close_intervalms = 1* tools::time::MILLISECOND , e_waitrecv_intervalms = 1* tools::time::MILLISECOND }
 缓冲区和时间间隔常量。 More...

Public Member Functions

 asio_kcp (i16_port port)
 构造函数,绑定到指定UDP端口并初始化KCP传输。
 ~asio_kcp () noexcept
 析构函数,停止IO线程并清理所有KCP会话。
i16_port port () const
bool sendu (const basio::ip::udp::endpoint &aendpoint, const char *buf, int32_t len)
 向指定UDP端点发送原始字节数据。
bool sendu (kcp_endpoint *akcpe, const char *buf, int32_t len)
 向KCP端点对应的远端发送原始字节数据。
bool sendu (const basio::ip::udp::endpoint &aendpoint, const std::shared_ptr< pack > &apack)
 向指定UDP端点发送序列化的数据包。
bool sendu (kcp_endpoint *akcpe, const std::shared_ptr< pack > &apack)
 向KCP端点对应的远端发送序列化的数据包。
bool sendu_waitrecv (const basio::ip::udp::endpoint &aendpoint, const std::shared_ptr< pack > &apack)
 发送序列化数据包并等待同一端点的回复。
bool sendu_waitrecv (const basio::ip::udp::endpoint &aendpoint, const char *buf, int len, const std::function< void(char *, int)> &afun)
 发送原始UDP数据报并阻塞等待来自同一端点的回复。
bool send (std::shared_ptr< pack > &apack)
 向所有活跃KCP会话广播一个序列化pack。
bool sendpackbyarea (i16_area aarea, std::shared_ptr< pack > &apack)
 仅向指定区域的会话广播一个序列化pack。
bool send (i32_sessionid asessionid, std::shared_ptr< pack > &apack)
 向指定会话ID发送序列化数据包。
bool send (i32_sessionid asessionid, const char *buf, int32_t len)
 向指定会话ID发送原始字节数据。
void connect (int32_t aconv, std::string &akcpsess, i64_actorid aserver, i64_actorid aclient, const std::string &aip, i16_port aport, const std::function< void(i32_session)> &afun)
 通过IP地址和端口发起KCP连接握手。
void connect (int32_t aconv, std::string &akcpsess, i64_actorid aserver, i64_actorid aclient, const basio::ip::udp::endpoint &aendpoint, const std::function< void(i32_session)> &afun)
 通过预构建的UDP端点发起KCP连接握手。
i64_actorid find_server (i32_session asession)
 根据会话ID查找对应的服务端Actor ID。
bool find_actorid (i32_session asession, i64_actorid &aserver, i64_actorid &aclient)
 根据会话ID查找对应的服务端和客户端Actor ID。
i32_session find_session (i64_actorid aclient)
 根据客户端Actor ID查找其当前KCP会话ID。
void close (i32_session asession)
 发起逻辑关闭握手,如果控制命令发送失败则回退到立即本地清理。
void close_net (i32_session asession)
 立即从本地会话表中移除KCP会话(不发送控制命令)。
void reset_add (int32_t aconv, const std::string &aip, i16_port aport, i64_actorid aserver, i64_actorid aclient)
 重新连接到同一对端后重建逻辑会话映射。
bool sempack (const std::shared_ptr< kcp_endpoint > &apstruct, const char *abuff, int abufflen)
 将一个完整重组的KCP载荷送入正常协议管线。
void start ()
 启动异步UDP接收循环,开始处理网络IO。

Detailed Description

基于Boost.Asio的UDP套接字KCP收发封装类。

将KCP可靠传输协议与Asio异步IO结合,提供完整的KCP网络传输功能。 不可拷贝,绑定到一个本地UDP端口,通过专用io_context线程运行异步IO。

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

缓冲区和时间间隔常量。

Enumerator
e_buff_byte 

UDP接收缓冲区大小(字节)。

e_buffrecv_byte 

KCP弹出数据包缓冲区大小(字节)。

e_close_intervalms 

关闭检查间隔(毫秒)。

e_waitrecv_intervalms 

等待回复轮询间隔(毫秒)。

Constructor & Destructor Documentation

◆ asio_kcp()

ngl::asio_kcp::asio_kcp ( i16_port port)
explicit

构造函数,绑定到指定UDP端口并初始化KCP传输。

Parameters
port本地UDP监听端口。

Member Function Documentation

◆ close()

void ngl::asio_kcp::close ( i32_session asession)

发起逻辑关闭握手,如果控制命令发送失败则回退到立即本地清理。

Parameters
asession待关闭的会话ID。

◆ close_net()

void ngl::asio_kcp::close_net ( i32_session asession)

立即从本地会话表中移除KCP会话(不发送控制命令)。

Parameters
asession待移除的会话ID。

◆ connect() [1/2]

void ngl::asio_kcp::connect ( int32_t aconv,
std::string & akcpsess,
i64_actorid aserver,
i64_actorid aclient,
const basio::ip::udp::endpoint & aendpoint,
const std::function< void(i32_session)> & afun )

通过预构建的UDP端点发起KCP连接握手。

Parameters
aconvKCP会话ID(conv值)。
[out]akcpsess输出的KCP会话标识字符串。
aserver服务端Actor ID。
aclient客户端Actor ID。
aendpoint目标UDP端点。
afun连接建立后的回调,参数为分配的会话ID。

◆ connect() [2/2]

void ngl::asio_kcp::connect ( int32_t aconv,
std::string & akcpsess,
i64_actorid aserver,
i64_actorid aclient,
const std::string & aip,
i16_port aport,
const std::function< void(i32_session)> & afun )

通过IP地址和端口发起KCP连接握手。

Parameters
aconvKCP会话ID(conv值)。
[out]akcpsess输出的KCP会话标识字符串。
aserver服务端Actor ID。
aclient客户端Actor ID。
aip目标IP地址。
aport目标端口。
afun连接建立后的回调,参数为分配的会话ID。

◆ find_actorid()

bool ngl::asio_kcp::find_actorid ( i32_session asession,
i64_actorid & aserver,
i64_actorid & aclient )

根据会话ID查找对应的服务端和客户端Actor ID。

Parameters
asession会话ID。
[out]aserver输出的服务端Actor ID。
[out]aclient输出的客户端Actor ID。
Returns
查找成功返回 true,失败返回 false。

◆ find_server()

i64_actorid ngl::asio_kcp::find_server ( i32_session asession)

根据会话ID查找对应的服务端Actor ID。

Parameters
asession会话ID。
Returns
服务端Actor ID,未找到返回无效值。

◆ find_session()

i32_session ngl::asio_kcp::find_session ( i64_actorid aclient)

根据客户端Actor ID查找其当前KCP会话ID。

Parameters
aclient客户端Actor ID。
Returns
对应的会话ID。

◆ reset_add()

void ngl::asio_kcp::reset_add ( int32_t aconv,
const std::string & aip,
i16_port aport,
i64_actorid aserver,
i64_actorid aclient )

重新连接到同一对端后重建逻辑会话映射。

Parameters
aconvKCP会话ID(conv值)。
aip远端IP地址。
aport远端端口。
aserver服务端Actor ID。
aclient客户端Actor ID。

◆ sempack()

bool ngl::asio_kcp::sempack ( const std::shared_ptr< kcp_endpoint > & apstruct,
const char * abuff,
int abufflen )

将一个完整重组的KCP载荷送入正常协议管线。

Parameters
apstructKCP端点。
abuff数据缓冲区指针。
abufflen数据长度(字节)。
Returns
处理成功返回 true,失败返回 false。

◆ send() [1/3]

bool ngl::asio_kcp::send ( i32_sessionid asessionid,
const char * buf,
int32_t len )

向指定会话ID发送原始字节数据。

Parameters
asessionid目标会话ID。
buf数据缓冲区指针。
len数据长度(字节)。
Returns
发送成功返回 true,失败返回 false。

◆ send() [2/3]

bool ngl::asio_kcp::send ( i32_sessionid asessionid,
std::shared_ptr< pack > & apack )

向指定会话ID发送序列化数据包。

Parameters
asessionid目标会话ID。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ send() [3/3]

bool ngl::asio_kcp::send ( std::shared_ptr< pack > & apack)

向所有活跃KCP会话广播一个序列化pack。

Parameters
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ sendpackbyarea()

bool ngl::asio_kcp::sendpackbyarea ( i16_area aarea,
std::shared_ptr< pack > & apack )

仅向指定区域的会话广播一个序列化pack。

Parameters
aarea目标区域ID。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ sendu() [1/4]

bool ngl::asio_kcp::sendu ( const basio::ip::udp::endpoint & aendpoint,
const char * buf,
int32_t len )

向指定UDP端点发送原始字节数据。

Parameters
aendpoint目标UDP端点。
buf数据缓冲区指针。
len数据长度(字节)。
Returns
发送成功返回 true,失败返回 false。

◆ sendu() [2/4]

bool ngl::asio_kcp::sendu ( const basio::ip::udp::endpoint & aendpoint,
const std::shared_ptr< pack > & apack )

向指定UDP端点发送序列化的数据包。

Parameters
aendpoint目标UDP端点。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ sendu() [3/4]

bool ngl::asio_kcp::sendu ( kcp_endpoint * akcpe,
const char * buf,
int32_t len )

向KCP端点对应的远端发送原始字节数据。

Parameters
akcpeKCP端点指针。
buf数据缓冲区指针。
len数据长度(字节)。
Returns
发送成功返回 true,失败返回 false。

◆ sendu() [4/4]

bool ngl::asio_kcp::sendu ( kcp_endpoint * akcpe,
const std::shared_ptr< pack > & apack )

向KCP端点对应的远端发送序列化的数据包。

Parameters
akcpeKCP端点指针。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ sendu_waitrecv() [1/2]

bool ngl::asio_kcp::sendu_waitrecv ( const basio::ip::udp::endpoint & aendpoint,
const char * buf,
int len,
const std::function< void(char *, int)> & afun )

发送原始UDP数据报并阻塞等待来自同一端点的回复。

Parameters
aendpoint目标UDP端点。
buf数据缓冲区指针。
len数据长度(字节)。
afun收到回复时的回调,参数为回复数据指针和长度。
Returns
发送成功返回 true,失败返回 false。

◆ sendu_waitrecv() [2/2]

bool ngl::asio_kcp::sendu_waitrecv ( const basio::ip::udp::endpoint & aendpoint,
const std::shared_ptr< pack > & apack )

发送序列化数据包并等待同一端点的回复。

Parameters
aendpoint目标UDP端点。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

The documentation for this class was generated from the following files: