ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::nsp_write< TDerived, TACTOR, T > Class Template Reference

NSP写端模板类,用于向NSP服务器发布本地数据变更并接收远程同步。 More...

#include <nsp_write.h>

Public Member Functions

void init ()
 向目标NSP服务器启动注册定时器,周期性发送注册请求直到成功。
void set_changedatafun (const std::function< void(int64_t, const T &, bool)> &afun)
 注册数据变更回调。
void set_deldatafun (const std::function< void(int64_t)> &afun)
 注册数据删除回调。
void set_loadfinishfun (const std::function< void()> &afun)
 注册首次全量同步完成回调。
T * add (i64_dataid adataid)
 添加新行并标记为脏,用于下次增量广播。
T * get (i64_dataid adataid)
 获取一行并标记为脏,用于下次增量广播。
bool erase (i64_dataid adataid)
 删除一行并标记为脏,用于下次增量广播。
const T * getconst (i64_dataid adataid)
 读取一行,不标记为脏。
const std::map< i64_actorid, T > & get_mapconst ()
 获取完整的镜像映射。
void exit ()
 从NSP服务器注销并销毁每个Actor的单例。
void change ()
 将累积的增量变更刷新到感兴趣的对等节点。
void handle (TDerived *aactor, const message< np_channel_data< T > > &adata)
 处理初始/增量数据同步消息。
void handle (TDerived *, const message< np_channel_check< T > > &adata)
 处理注册检查消息(心跳),若未注册则发送注册请求。
void handle (TDerived *, const message< np_channel_register_reply< T > > &adata)
 处理注册回复消息,更新对等节点列表、订阅范围和字段权限。
void handle (TDerived *, const message< np_channel_dataid_sync< T > > &adata)
 处理数据ID同步消息,根据新对等节点的订阅模式更新本地订阅缓存。
void handle (TDerived *, const message< np_channel_exit< T > > &adata)
 处理对等节点退出消息,从本地订阅缓存中移除该节点。

Static Public Member Functions

static nsp_write< TDerived, TACTOR, T > & instance (i64_actorid aactorid)
 获取每个Actor的写端单例。
static nsp_write< TDerived, TACTOR, T > & instance_writeall (TDerived *aactor, const std::set< i32_fieldnumber > &areadfieldnumbers, const std::set< i32_fieldnumber > &awritefieldnumbers)
 创建镜像所有行且可写所有行的写端。
static nsp_write< TDerived, TACTOR, T > & instance_writepart (TDerived *aactor, const std::set< i32_fieldnumber > &areadfieldnumbers, const std::set< i32_fieldnumber > &awritefieldnumbers, const std::set< i64_actorid > &areadids, const std::set< i64_actorid > &awriteids)
 创建具有显式读/写行和字段范围的写端。
static i64_actorid to_actorid (i64_actorid adataid)
 将行ID重新标记为底层NSP服务器使用的拥有者Actor类型。
static void change (i64_actorid aactorid)
 静态版本:按Actor ID查找写端实例并触发增量刷新。

Detailed Description

template<typename TDerived, typename TACTOR, typename T>
class ngl::nsp_write< TDerived, TACTOR, T >

NSP写端模板类,用于向NSP服务器发布本地数据变更并接收远程同步。

同时承担读写职责:从服务器接收初始/增量同步数据,并将本地数据变更 广播到所有订阅了相关行的对等节点。支持全量和部分行两种订阅模式。 本地数据变更通过add()/get()/erase()标记为脏,在change()时批量刷新。

Template Parameters
TDerived派生Actor类型
TACTOR数据拥有者Actor类型(用于确定NSP服务器ID)
T数据行的protobuf消息类型

Member Function Documentation

◆ add()

template<typename TDerived, typename TACTOR, typename T>
T * ngl::nsp_write< TDerived, TACTOR, T >::add ( i64_dataid adataid)

添加新行并标记为脏,用于下次增量广播。

添加新行并标记为脏,用于下次增量广播。

Parameters
adataid行数据ID
Returns
T* 新创建行数据的指针
Parameters
adataid行数据ID
Returns
T* 新创建行数据的指针

◆ change() [1/2]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::change ( )

将累积的增量变更刷新到感兴趣的对等节点。

将累积的增量变更刷新到所有感兴趣的对等节点。

Note
先向全量订阅节点发送合并数据包,再向部分订阅节点逐行发送。

分两阶段广播:

  1. 向全量订阅节点(读/写)发送合并数据包,包含所有变更行和删除行。
  2. 向部分订阅节点逐行发送,仅包含该节点关心的行。 每个数据包的字段按目标节点的权限进行过滤。

◆ change() [2/2]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::change ( i64_actorid aactorid)
static

静态版本:按Actor ID查找写端实例并触发增量刷新。

Parameters
aactoridActor全局唯一标识符
aactoridActor全局唯一标识符
Note
若实例不存在则静默返回。

◆ erase()

template<typename TDerived, typename TACTOR, typename T>
bool ngl::nsp_write< TDerived, TACTOR, T >::erase ( i64_dataid adataid)

删除一行并标记为脏,用于下次增量广播。

删除一行并标记为脏,用于下次增量广播。

Parameters
adataid行数据ID
Returns
bool 是否成功删除(行存在或为新删除标记时返回true)
Parameters
adataid行数据ID
Returns
bool 是否成功删除(行存在或为新删除标记时返回true)

◆ exit()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::exit ( )

从NSP服务器注销并销毁每个Actor的单例。

退出写端:清除定时器,向相关节点发送同步通知和退出通知,并销毁单例。

Note
会通知所有相关节点此写端退出。

◆ get()

template<typename TDerived, typename TACTOR, typename T>
T * ngl::nsp_write< TDerived, TACTOR, T >::get ( i64_dataid adataid)

获取一行并标记为脏,用于下次增量广播。

获取一行并标记为脏,用于下次增量广播。

Parameters
adataid行数据ID
Returns
T* 行数据指针,不存在时返回nullptr
Parameters
adataid行数据ID
Returns
T* 行数据指针,不存在时返回nullptr

◆ get_mapconst()

template<typename TDerived, typename TACTOR, typename T>
const std::map< i64_actorid, T > & ngl::nsp_write< TDerived, TACTOR, T >::get_mapconst ( )

获取完整的镜像映射。

获取完整的镜像映射。

Returns
行ID到行数据的映射表常量引用
Returns
行ID到行数据的映射表常量引用

◆ getconst()

template<typename TDerived, typename TACTOR, typename T>
const T * ngl::nsp_write< TDerived, TACTOR, T >::getconst ( i64_dataid adataid)

读取一行,不标记为脏。

读取一行,不标记为脏。

Parameters
adataid行数据ID
Returns
const T* 行数据常量指针,不存在时返回nullptr
Parameters
adataid行数据ID
Returns
const T* 行数据常量指针,不存在时返回nullptr

◆ handle() [1/5]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::handle ( TDerived * aactor,
const message< np_channel_check< T > > & adata )

处理注册检查消息(心跳),若未注册则发送注册请求。

处理注册检查消息(心跳)。

Parameters
aactor目标Actor指针
adata检查消息

若已注册则清除定时器;否则构造注册请求消息,包含订阅范围和字段权限, 发送给NSP服务器以请求注册。

◆ handle() [2/5]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::handle ( TDerived * aactor,
const message< np_channel_dataid_sync< T > > & adata )

处理数据ID同步消息,根据新对等节点的订阅模式更新本地订阅缓存。

处理数据ID同步消息。

Parameters
aactor目标Actor指针
adata数据ID同步消息

根据新对等节点的读/写和全量/部分订阅模式,更新本地订阅缓存 (m_nodereadalls、m_nodewritealls、m_othercare)和退出通知集合。

◆ handle() [3/5]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::handle ( TDerived * ,
const message< np_channel_exit< T > > & adata )

处理对等节点退出消息,从本地订阅缓存中移除该节点。

处理对等节点退出消息。

Parameters
aactor目标Actor指针
adata退出消息

一旦对等节点退出,增量广播应停止将其作为目标。 从退出通知集合、全量读/写集合和部分订阅缓存中移除该节点。

◆ handle() [4/5]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::handle ( TDerived * aactor,
const message< np_channel_register_reply< T > > & adata )

处理注册回复消息,更新对等节点列表、订阅范围和字段权限。

处理注册回复消息。

Parameters
aactor目标Actor指针
adata注册回复消息

标记为已注册,清除定时器,更新字段权限,并记录全量/部分订阅节点及其订阅范围。

◆ handle() [5/5]

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::handle ( TDerived * aactor,
const message< np_channel_data< T > > & adata )

处理初始/增量数据同步消息。

Parameters
aactor目标Actor指针
adata数据同步消息

首次同步时直接对齐到写端字段布局;增量更新时按源/目标类型重新映射字段。 同时处理新增/更新行和删除行,触发相应的用户回调。

◆ init()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::init ( )

向目标NSP服务器启动注册定时器,周期性发送注册请求直到成功。

初始化写端:构建NSP服务器ID,注册消息处理器,启动注册重试定时器。

Note
通过std::call_once确保消息处理器仅注册一次。

◆ instance()

template<typename TDerived, typename TACTOR, typename T>
nsp_write< TDerived, TACTOR, T > & ngl::nsp_write< TDerived, TACTOR, T >::instance ( i64_actorid aactorid)
static

获取每个Actor的写端单例。

获取每个Actor的写端单例。

Parameters
aactoridActor全局唯一标识符
Returns
nsp_write& 写端实例引用
Parameters
aactoridActor全局唯一标识符
Returns
nsp_write& 写端实例引用

◆ instance_writeall()

template<typename TDerived, typename TACTOR, typename T>
nsp_write< TDerived, TACTOR, T > & ngl::nsp_write< TDerived, TACTOR, T >::instance_writeall ( TDerived * aactor,
const std::set< i32_fieldnumber > & areadfieldnumbers,
const std::set< i32_fieldnumber > & awritefieldnumbers )
static

创建镜像所有行且可写所有行的写端。

创建镜像所有行且可写所有行的写端。

Parameters
aactor拥有者Actor指针
areadfieldnumbers只读字段编号集合
awritefieldnumbers可写字段编号集合
Returns
nsp_write& 创建的写端实例引用
Parameters
aactor拥有者Actor指针
areadfieldnumbers只读字段编号集合
awritefieldnumbers可写字段编号集合
Returns
nsp_write& 创建的写端实例引用

◆ instance_writepart()

template<typename TDerived, typename TACTOR, typename T>
nsp_write< TDerived, TACTOR, T > & ngl::nsp_write< TDerived, TACTOR, T >::instance_writepart ( TDerived * aactor,
const std::set< i32_fieldnumber > & areadfieldnumbers,
const std::set< i32_fieldnumber > & awritefieldnumbers,
const std::set< i64_actorid > & areadids,
const std::set< i64_actorid > & awriteids )
static

创建具有显式读/写行和字段范围的写端。

创建具有显式读/写行和字段范围的写端。

Parameters
aactor拥有者Actor指针
areadfieldnumbers只读字段编号集合
awritefieldnumbers可写字段编号集合
areadids只读数据ID集合
awriteids可写数据ID集合
Returns
nsp_write& 创建的写端实例引用
Parameters
aactor拥有者Actor指针
areadfieldnumbers只读字段编号集合
awritefieldnumbers可写字段编号集合
areadids只读数据ID集合
awriteids可写数据ID集合
Returns
nsp_write& 创建的写端实例引用

◆ set_changedatafun()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::set_changedatafun ( const std::function< void(int64_t, const T &, bool)> & afun)

注册数据变更回调。

注册数据变更回调。

Parameters
afun回调函数,签名为void(int64_t行ID, const T&行数据, bool是否首次同步)
Parameters
afun回调函数,签名为void(int64_t行ID, const T&行数据, bool是否首次同步)

◆ set_deldatafun()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::set_deldatafun ( const std::function< void(int64_t)> & afun)

注册数据删除回调。

注册数据删除回调。

Parameters
afun回调函数,签名为void(int64_t行ID)
Parameters
afun回调函数,签名为void(int64_t行ID)

◆ set_loadfinishfun()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_write< TDerived, TACTOR, T >::set_loadfinishfun ( const std::function< void()> & afun)

注册首次全量同步完成回调。

注册首次全量同步完成回调。

Parameters
afun回调函数,签名为void()
Parameters
afun回调函数,签名为void()

◆ to_actorid()

template<typename TDerived, typename TACTOR, typename T>
i64_actorid ngl::nsp_write< TDerived, TACTOR, T >::to_actorid ( i64_actorid adataid)
static

将行ID重新标记为底层NSP服务器使用的拥有者Actor类型。

将行ID重新标记为底层NSP服务器使用的拥有者Actor类型。

Parameters
adataid原始数据ID
Returns
i64_actorid 重新标记后的Actor ID
Parameters
adataid原始数据ID
Returns
i64_actorid 重新标记后的Actor ID

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