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

网络数据包结构体。 More...

#include <pack.h>

Public Member Functions

 pack ()=default
 默认构造函数
 pack (const pack &)=delete
packoperator= (const pack &)=delete
void free ()
 释放数据包资源。
 ~pack ()
 析构函数
void set (bpool &apool)
 设置缓冲池。
void reset ()
 重置数据包状态。
bool isready ()
 检查数据包是否就绪。
bool malloc (int32_t alen)
 分配消息体内存。
void set_actor (i64_actorid aactor, i64_actorid arequestactorid)
 设置Actor ID。

Static Public Member Functions

static std::shared_ptr< packmake_pack (bpool *apool, int32_t alen)
 创建数据包。

Public Attributes

ENET_PROTOCOL m_protocol = ENET_TCP
 网络协议类型
i32_session m_id = 0
 会话ID
std::shared_ptr< pack_headm_head = pack_head::make_pooled()
 消息头共享指针
bpoolm_bpool = nullptr
 缓冲池指针
bool m_rate_accounted = false
 是否已计入接收速率限制
std::vector< char > m_auto
 自动管理的缓冲区
char * m_buff = nullptr
 消息体缓冲区指针
int32_t m_len = 0
 消息体长度
int32_t m_pos = 0
 当前读写位置

Detailed Description

网络数据包结构体。

表示一个完整的网络数据包,包含:

  • 协议类型和会话信息
  • 消息头和消息体
  • 内存管理信息
  • 接收状态跟踪

支持从共享缓冲池分配内存,提高内存使用效率。

Constructor & Destructor Documentation

◆ ~pack()

ngl::pack::~pack ( )

析构函数

析构函数。

释放数据包占用的所有资源。 使用Try-Catch宏处理可能的异常,确保资源释放的安全性。

Member Function Documentation

◆ free()

void ngl::pack::free ( )

释放数据包资源。

释放数据包占用的所有资源,包括:

  • 如果使用缓冲池分配的内存,则归还给缓冲池
  • 如果使用std::vector备用分配,则清理vector
  • 重置所有状态为初始值
Note
如果m_buff为nullptr,则直接返回,不执行任何操作。

◆ isready()

bool ngl::pack::isready ( )

检查数据包是否就绪。

当头部中声明的消息体大小已完全接收时,pack变为就绪状态。

Returns
就绪返回true,否则返回false

当头部中声明的消息体大小已完全接收时,pack变为就绪状态。 检查条件:头部已成功解析且当前接收位置 >= 消息体大小。

Returns
就绪返回true,否则返回false

◆ make_pack()

std::shared_ptr< pack > ngl::pack::make_pack ( bpool * apool,
int32_t alen )
static

创建数据包。

创建空的pack或从共享池中分配预设大小的消息体缓冲区。

Parameters
apool缓冲池指针,如果为nullptr则创建空数据包
alen消息体大小,如果为0则创建空数据包
Returns
创建的数据包共享指针

创建一个新的数据包实例,并可选地分配消息体内存。 支持两种创建方式:

  1. 创建空的数据包(alen为0)
  2. 创建带有预分配消息体的数据包(alen > 0)
Parameters
apool缓冲池指针,如果为nullptr则使用备用分配方式
alen消息体大小(字节),如果为0则创建空数据包
Returns
创建的数据包共享指针,失败返回nullptr
Note
如果alen < 0,直接返回nullptr。
如果设置了缓冲池,会先将数据包与缓冲池关联。
如果alen > 0,会尝试分配消息体内存,分配失败返回nullptr。

◆ malloc()

bool ngl::pack::malloc ( int32_t alen)

分配消息体内存。

Parameters
alen要分配的内存大小(字节)
Returns
分配成功返回true,否则返回false

为数据包分配指定大小的消息体内存。支持两种分配方式:

  1. 如果设置了缓冲池(m_bpool),则从缓冲池分配内存
  2. 如果没有缓冲池,则使用std::vector进行备用分配(主要用于测试)
Parameters
alen要分配的内存大小(字节)
Returns
分配成功返回true,否则返回false
Note
如果之前已有分配的内存,会先释放再重新分配。
分配失败时会重置所有状态为初始值。

◆ reset()

void ngl::pack::reset ( )

重置数据包状态。

释放数据包占用的所有资源,并将所有状态重置为初始值。 包括释放消息体内存、重置协议类型、会话ID、位置信息等。

◆ set()

void ngl::pack::set ( bpool & apool)

设置缓冲池。

Parameters
apool缓冲池引用

将数据包与指定的缓冲池关联,以便后续的内存分配使用该缓冲池。

Parameters
apool缓冲池引用

◆ set_actor()

void ngl::pack::set_actor ( i64_actorid aactor,
i64_actorid arequestactorid )

设置Actor ID。

Parameters
aactor发送方Actor ID
arequestactorid请求方Actor ID

设置数据包的发送方和请求方Actor ID。 这些ID用于在Actor系统中标识数据包的来源和目标。

Parameters
aactor发送方Actor ID
arequestactorid请求方Actor ID
Note
如果消息体缓冲区未分配(m_buff为nullptr),则直接返回。

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