|
ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
|
拥有会话并驱动更新循环的高层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< ukcp > | create (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缓存,用于会话握手。 | |
拥有会话并驱动更新循环的高层KCP传输门面类。
作为KCP网络层的统一入口点,为上层应用提供简洁的KCP通信接口。 内部持有 asio_kcp 实例完成底层UDP收发,并通过 bpool 管理出站数据包内存。
| ngl::ukcp::ukcp | ( | i16_port | aprot | ) |
构造函数,绑定到指定UDP端口并初始化KCP传输。
| aprot | 本地UDP监听端口。 |
| 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连接握手。
| [out] | akcpsess | 输出的KCP会话标识字符串。 |
| aserver | 服务端Actor ID。 | |
| aclient | 客户端Actor ID。 | |
| aendpoint | 目标UDP端点。 | |
| afun | 连接建立后的回调,参数为分配的会话ID。 |
| 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连接握手。
| [out] | akcpsess | 输出的KCP会话标识字符串。 |
| aserver | 服务端Actor ID。 | |
| aclient | 客户端Actor ID。 | |
| aip | 目标IP地址。 | |
| aport | 目标端口。 | |
| afun | 连接建立后的回调,参数为分配的会话ID。 |
工厂方法,创建并返回一个 ukcp 智能指针。
| aprot | 本地UDP监听端口。 |
| bool ngl::ukcp::find_actorid | ( | i32_session | asession, |
| i64_actorid & | aserver, | ||
| i64_actorid & | aclient ) |
根据会话ID查找对应的服务端和客户端Actor ID。
| asession | 会话ID。 | |
| [out] | aserver | 输出的服务端Actor ID。 |
| [out] | aclient | 输出的客户端Actor ID。 |
| i64_actorid ngl::ukcp::find_server | ( | i32_session | asession | ) |
根据会话ID查找对应的服务端Actor ID。
| asession | 会话ID。 |
| i32_session ngl::ukcp::find_session | ( | i64_actorid | aclient | ) |
根据客户端Actor ID查找其当前KCP会话ID。
| aclient | 客户端Actor ID。 |
| void ngl::ukcp::reset_add | ( | const std::string & | aip, |
| i16_port | aport, | ||
| i64_actorid | aserver, | ||
| i64_actorid | aclient ) |
为已知的远程端点重建会话表条目(仅指定Actor映射)。
| aip | 远端IP地址。 |
| aport | 远端端口。 |
| aserver | 服务端Actor ID。 |
| aclient | 客户端Actor ID。 |
| void ngl::ukcp::reset_add | ( | int32_t | aconv, |
| const std::string & | aip, | ||
| i16_port | aport, | ||
| i64_actorid | aserver, | ||
| i64_actorid | aclient ) |
为已知的远程端点重建会话表条目(通过IP和端口)。
| aconv | KCP会话ID(conv值)。 |
| aip | 远端IP地址。 |
| aport | 远端端口。 |
| aserver | 服务端Actor ID。 |
| aclient | 客户端Actor ID。 |
|
nodiscard |
向所有活跃KCP会话广播数据包。
| apack | 已序列化的数据包。 |
|
nodiscard |
向一组Actor广播已序列化的数据包。
| aactors | 目标Actor ID集合。 |
| apack | 已序列化的数据包。 |
|
inlinenodiscard |
向一组Actor广播序列化数据。
| T | 数据类型,需支持 net_pack<T>::npack 序列化。 |
| aactors | 目标Actor ID集合。 |
| adata | 待发送的数据引用。 |
|
nodiscard |
向单个Actor发送已序列化的数据包。
| aactor | 目标Actor ID。 |
| apack | 已序列化的数据包。 |
|
inlinenodiscard |
向单个Actor发送序列化数据。
| T | 数据类型,需支持 net_pack<T>::npack 序列化。 |
| aactoridclient | 目标Actor ID。 |
| adata | 待发送的数据引用。 |
向指定区域的所有会话广播数据包。
| aarea | 目标区域ID。 |
| apack | 已序列化的数据包。 |
| bool ngl::ukcp::sendu | ( | const basio::ip::udp::endpoint & | aendpoint, |
| const char * | buf, | ||
| int | len ) |
向指定UDP端点发送原始字节数据。
| aendpoint | 目标UDP端点。 |
| buf | 数据缓冲区指针。 |
| len | 数据长度(字节)。 |
|
inline |
向指定UDP端点发送序列化数据(绕过KCP)。
| T | 数据类型,需支持 net_pack<T>::npack 序列化。 |
| aendpoint | 目标UDP端点。 |
| adata | 待发送的数据引用。 |
| aactorid | 发送方Actor ID。 |
| arequestactorid | 请求方Actor ID。 |
| bool ngl::ukcp::sendu_waitrecv | ( | const basio::ip::udp::endpoint & | aendpoint, |
| const char * | buf, | ||
| int | len, | ||
| const std::function< void(char *, int)> & | afun ) |
发送原始UDP请求并阻塞调用者,直到匹配的回复到达。
| aendpoint | 目标UDP端点。 |
| buf | 数据缓冲区指针。 |
| len | 数据长度(字节)。 |
| afun | 收到回复时的回调,参数为回复数据指针和长度。 |
|
static |
验证客户端和服务端共享的逻辑握手令牌。
| aclient | 客户端Actor ID。 |
| aserver | 服务端Actor ID。 |
| asession | 待验证的会话标识字符串。 |
|
static |
派生客户端和服务端共享的逻辑握手令牌。
| aclient | 客户端Actor ID。 | |
| aserver | 服务端Actor ID。 | |
| [out] | asession | 输出的会话标识字符串。 |