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

存储每个Actor类型的字段权限,使NSP仅在读/写/服务器节点之间复制允许的protobuf字段。 More...

#include <nsp.h>

Public Member Functions

void init (bool anspserver)
 重置字段规则,并在服务器端和客户端合并策略之间切换。
void set_field (i16_actortype atype, const std::map< i32_fieldnumber, epb_field > &anode_fieldnumbers)
 将一个Actor类型的字段权限合并到表中。
void set_field (const std::map< i16_actortype, std::map< i32_fieldnumber, epb_field > > &anode_fieldnumbers)
 合并完整的 Actor类型 -> 字段权限 映射表。
void add_field (i16_actortype atype, i32_fieldnumber afieldnumber, epb_field afieldtype)
 为一个Actor类型添加一个字段权限。
template<typename T>
void add_field (i16_actortype atype, epb_field afieldtype, const std::set< i32_fieldnumber > &afield)
 为一个Actor类型的多个字段批量设置权限。
template<typename T>
void add_field (i16_actortype atype, const std::set< i32_fieldnumber > &areadfield, const std::set< i32_fieldnumber > &awritefield)
 为一个Actor类型分别设置读和写字段权限。
std::map< i32_fieldnumber, epb_field > * get_field (i16_actortype atype)
 返回指定Actor类型的字段权限表。
template<typename T>
bool field_copy (i16_actortype atypesource, i16_actortype atypetarget, const T &asource, T &atarget, bool amessage)
 仅复制源/目标权限表允许的字段。
template<typename T>
bool field_copy (i16_actortype atype, const T &asource, T &atarget, bool amessage)
 使用单个Actor类型的字段权限表进行复制。
std::map< i16_actortype, std::map< i32_fieldnumber, epb_field > > & field_numbers ()
 暴露完整的 Actor类型 -> 字段权限 映射表。

Detailed Description

存储每个Actor类型的字段权限,使NSP仅在读/写/服务器节点之间复制允许的protobuf字段。

管理protobuf字段的访问权限,控制不同Actor类型之间的数据同步。 服务器端合并保持严格的字段角色一致性,客户端合并允许写权限覆盖读权限。

Member Function Documentation

◆ add_field() [1/3]

template<typename T>
void ngl::operator_field::add_field ( i16_actortype atype,
const std::set< i32_fieldnumber > & areadfield,
const std::set< i32_fieldnumber > & awritefield )
inline

为一个Actor类型分别设置读和写字段权限。

Template Parameters
Tprotobuf消息类型
Parameters
atypeActor类型
areadfield读权限字段编号集合;空集表示订阅所有字段
awritefield写权限字段编号集合

◆ add_field() [2/3]

template<typename T>
void ngl::operator_field::add_field ( i16_actortype atype,
epb_field afieldtype,
const std::set< i32_fieldnumber > & afield )
inline

为一个Actor类型的多个字段批量设置权限。

Template Parameters
Tprotobuf消息类型
Parameters
atypeActor类型
afieldtype字段权限类型
afield字段编号集合;读权限时空集表示订阅所有字段,写权限时空集会触发断言

◆ add_field() [3/3]

void ngl::operator_field::add_field ( i16_actortype atype,
i32_fieldnumber afieldnumber,
epb_field afieldtype )

为一个Actor类型添加一个字段权限。

添加单个字段权限

Parameters
atypeActor类型
afieldnumber字段编号
afieldtype字段权限类型

根据是否为NSP服务器端选择不同的合并策略。

Parameters
atypeActor类型
afieldnumber字段编号
afieldtype字段权限类型

◆ field_copy() [1/2]

template<typename T>
bool ngl::operator_field::field_copy ( i16_actortype atype,
const T & asource,
T & atarget,
bool amessage )
inline

使用单个Actor类型的字段权限表进行复制。

Template Parameters
Tprotobuf消息类型
Parameters
atypeActor类型
asource源消息对象
atarget目标消息对象(输出参数)
amessagetrue表示复制消息级字段,false表示复制子消息字段
Returns
bool 复制是否成功(权限表不存在时返回false)

◆ field_copy() [2/2]

template<typename T>
bool ngl::operator_field::field_copy ( i16_actortype atypesource,
i16_actortype atypetarget,
const T & asource,
T & atarget,
bool amessage )
inline

仅复制源/目标权限表允许的字段。

Template Parameters
Tprotobuf消息类型
Parameters
atypesource源Actor类型
atypetarget目标Actor类型
asource源消息对象
atarget目标消息对象(输出参数)
amessagetrue表示复制消息级字段,false表示复制子消息字段
Returns
bool 复制是否成功(权限表不存在时返回false)

◆ field_numbers()

std::map< i16_actortype, std::map< i32_fieldnumber, epb_field > > & ngl::operator_field::field_numbers ( )

暴露完整的 Actor类型 -> 字段权限 映射表。

Returns
映射表引用

◆ get_field()

std::map< i32_fieldnumber, epb_field > * ngl::operator_field::get_field ( i16_actortype atype)

返回指定Actor类型的字段权限表。

Parameters
atypeActor类型
Returns
字段权限映射表指针,不存在时返回nullptr

◆ init()

void ngl::operator_field::init ( bool anspserver)

重置字段规则,并在服务器端和客户端合并策略之间切换。

初始化字段权限管理器

Parameters
anspservertrue表示服务器端模式,false表示客户端模式
anspserver是否为NSP服务器端

◆ set_field() [1/2]

void ngl::operator_field::set_field ( const std::map< i16_actortype, std::map< i32_fieldnumber, epb_field > > & anode_fieldnumbers)

合并完整的 Actor类型 -> 字段权限 映射表。

Parameters
anode_fieldnumbers完整的字段权限映射表

◆ set_field() [2/2]

void ngl::operator_field::set_field ( i16_actortype atype,
const std::map< i32_fieldnumber, epb_field > & anode_fieldnumbers )

将一个Actor类型的字段权限合并到表中。

设置单个Actor类型的字段权限映射

Parameters
atypeActor类型
anode_fieldnumbers字段编号到权限类型的映射

合并来自多个对等节点的重复通告,保持角色一致性。

Parameters
atypeActor类型
anode_fieldnumbers字段编号到权限的映射

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