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

拥有会话并驱动更新循环的高层KCP传输门面类。 More...

#include <ukcp.h>

Public Member Functions

 ukcp (i16_port aprot)
 构造函数,绑定到指定UDP端口并初始化KCP传输。
i16_port port () const
template<typename T>
bool sendbyactor (const std::set< i64_actorid > &aactors, T &adata)
 向一组Actor广播序列化数据。
template<typename T>
bool sendbyactor (i64_actorid aactoridclient, T &adata)
 向单个Actor发送序列化数据。
bool sendbyactor (const std::set< i64_actorid > &aactors, std::shared_ptr< pack > &apack)
 向一组Actor广播已序列化的数据包。
bool sendbyactor (i64_actorid aactor, std::shared_ptr< pack > &apack)
 向单个Actor发送已序列化的数据包。
bool sendpackbyarea (i16_area aarea, std::shared_ptr< pack > &apack)
 向指定区域的所有会话广播数据包。
bool send (std::shared_ptr< pack > &apack)
 向所有活跃KCP会话广播数据包。
template<typename T>
bool sendu (const basio::ip::udp::endpoint &aendpoint, T &adata, i64_actorid aactorid, i64_actorid arequestactorid)
 向指定UDP端点发送序列化数据(绕过KCP)。
bool sendu (const basio::ip::udp::endpoint &aendpoint, const char *buf, int len)
 向指定UDP端点发送原始字节数据。
bool sendu_waitrecv (const basio::ip::udp::endpoint &aendpoint, const char *buf, int len, const std::function< void(char *, int)> &afun)
 发送原始UDP请求并阻塞调用者,直到匹配的回复到达。
void connect (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 (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。
i32_session find_session (i64_actorid aclient)
 根据客户端Actor ID查找其当前KCP会话ID。
bool find_actorid (i32_session asession, i64_actorid &aserver, i64_actorid &aclient)
 根据会话ID查找对应的服务端和客户端Actor ID。
void reset_add (int32_t aconv, const std::string &aip, i16_port aport, i64_actorid aserver, i64_actorid aclient)
 为已知的远程端点重建会话表条目(通过IP和端口)。
void reset_add (const std::string &aip, i16_port aport, i64_actorid aserver, i64_actorid aclient)
 为已知的远程端点重建会话表条目(仅指定Actor映射)。

Static Public Member Functions

static std::shared_ptr< ukcpcreate (i16_port aprot)
 工厂方法,创建并返回一个 ukcp 智能指针。
static bool session_create (i64_actorid aclient, i64_actorid aserver, std::string &asession)
 派生客户端和服务端共享的逻辑握手令牌。
static bool session_check (i64_actorid aclient, i64_actorid aserver, const std::string &asession)
 验证客户端和服务端共享的逻辑握手令牌。

Static Public Attributes

static const int32_t m_conv = 1
 KCP协议默认会话ID。
static std::string m_localuip = ""
 本机外部IP缓存,用于会话握手。

Detailed Description

拥有会话并驱动更新循环的高层KCP传输门面类。

作为KCP网络层的统一入口点,为上层应用提供简洁的KCP通信接口。 内部持有 asio_kcp 实例完成底层UDP收发,并通过 bpool 管理出站数据包内存。

Constructor & Destructor Documentation

◆ ukcp()

ngl::ukcp::ukcp ( i16_port aprot)

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

Parameters
aprot本地UDP监听端口。

Member Function Documentation

◆ connect() [1/2]

void ngl::ukcp::connect ( 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
[out]akcpsess输出的KCP会话标识字符串。
aserver服务端Actor ID。
aclient客户端Actor ID。
aendpoint目标UDP端点。
afun连接建立后的回调,参数为分配的会话ID。

◆ connect() [2/2]

void ngl::ukcp::connect ( 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
[out]akcpsess输出的KCP会话标识字符串。
aserver服务端Actor ID。
aclient客户端Actor ID。
aip目标IP地址。
aport目标端口。
afun连接建立后的回调,参数为分配的会话ID。

◆ create()

std::shared_ptr< ukcp > ngl::ukcp::create ( i16_port aprot)
static

工厂方法,创建并返回一个 ukcp 智能指针。

Parameters
aprot本地UDP监听端口。
Returns
指向新创建 ukcp 实例的 shared_ptr。

◆ find_actorid()

bool ngl::ukcp::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::ukcp::find_server ( i32_session asession)

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

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

◆ find_session()

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

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

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

◆ reset_add() [1/2]

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

为已知的远程端点重建会话表条目(仅指定Actor映射)。

Parameters
aip远端IP地址。
aport远端端口。
aserver服务端Actor ID。
aclient客户端Actor ID。

◆ reset_add() [2/2]

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

为已知的远程端点重建会话表条目(通过IP和端口)。

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

◆ send()

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

向所有活跃KCP会话广播数据包。

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

◆ sendbyactor() [1/4]

bool ngl::ukcp::sendbyactor ( const std::set< i64_actorid > & aactors,
std::shared_ptr< pack > & apack )
nodiscard

向一组Actor广播已序列化的数据包。

Parameters
aactors目标Actor ID集合。
apack已序列化的数据包。
Returns
发送成功返回 true,失败返回 false。

◆ sendbyactor() [2/4]

template<typename T>
bool ngl::ukcp::sendbyactor ( const std::set< i64_actorid > & aactors,
T & adata )
inlinenodiscard

向一组Actor广播序列化数据。

Template Parameters
T数据类型,需支持 net_pack<T>::npack 序列化。
Parameters
aactors目标Actor ID集合。
adata待发送的数据引用。
Returns
发送成功返回 true,序列化失败返回 false。

◆ sendbyactor() [3/4]

bool ngl::ukcp::sendbyactor ( i64_actorid aactor,
std::shared_ptr< pack > & apack )
nodiscard

向单个Actor发送已序列化的数据包。

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

◆ sendbyactor() [4/4]

template<typename T>
bool ngl::ukcp::sendbyactor ( i64_actorid aactoridclient,
T & adata )
inlinenodiscard

向单个Actor发送序列化数据。

Template Parameters
T数据类型,需支持 net_pack<T>::npack 序列化。
Parameters
aactoridclient目标Actor ID。
adata待发送的数据引用。
Returns
发送成功返回 true,序列化失败返回 false。

◆ sendpackbyarea()

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

向指定区域的所有会话广播数据包。

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

◆ sendu() [1/2]

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

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

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

◆ sendu() [2/2]

template<typename T>
bool ngl::ukcp::sendu ( const basio::ip::udp::endpoint & aendpoint,
T & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )
inline

向指定UDP端点发送序列化数据(绕过KCP)。

Template Parameters
T数据类型,需支持 net_pack<T>::npack 序列化。
Parameters
aendpoint目标UDP端点。
adata待发送的数据引用。
aactorid发送方Actor ID。
arequestactorid请求方Actor ID。
Returns
发送成功返回 true,序列化失败返回 false。

◆ sendu_waitrecv()

bool ngl::ukcp::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。

◆ session_check()

bool ngl::ukcp::session_check ( i64_actorid aclient,
i64_actorid aserver,
const std::string & asession )
static

验证客户端和服务端共享的逻辑握手令牌。

Parameters
aclient客户端Actor ID。
aserver服务端Actor ID。
asession待验证的会话标识字符串。
Returns
验证通过返回 true,失败返回 false。

◆ session_create()

bool ngl::ukcp::session_create ( i64_actorid aclient,
i64_actorid aserver,
std::string & asession )
static

派生客户端和服务端共享的逻辑握手令牌。

Parameters
aclient客户端Actor ID。
aserver服务端Actor ID。
[out]asession输出的会话标识字符串。
Returns
创建成功返回 true,失败返回 false。

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