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

NSP读端模板类,用于订阅和接收来自NSP服务器的远程数据同步。 More...

#include <nsp_read.h>

Public Types

using tnsp_read = nsp_read<TDerived, TACTOR, T>
 本类型的别名,简化内部引用。

Public Member Functions

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)
 注册首次全量同步完成回调。
void init ()
 向目标NSP服务器启动注册定时器,周期性发送注册请求直到成功。
void exit ()
 从NSP服务器注销并销毁每个Actor的单例。
const T * getconst (i64_dataid adataid)
 读取一个镜像行。
const std::map< i64_actorid, T > & get_mapconst ()
 获取完整的镜像映射。
void handle (TDerived *aactor, const message< np_channel_data< T > > &adata)
 处理初始/增量数据同步消息。
void handle (TDerived *aactor, const message< np_channel_check< T > > &adata)
 处理注册检查消息(心跳),若未注册则发送注册请求。
void handle (TDerived *aactor, const message< np_channel_register_reply< T > > &adata)
 处理注册回复消息,更新对等节点列表和字段权限。
void handle (TDerived *aactor, const message< np_channel_dataid_sync< T > > &adata)
 处理数据ID同步消息,更新对等节点的字段权限。

Static Public Member Functions

static nsp_read< TDerived, TACTOR, T > & instance (i64_actorid aactorid)
 获取每个Actor的读端单例。
static nsp_read< TDerived, TACTOR, T > & instance_readall (TDerived *aactor, const std::set< i32_fieldnumber > &afieldnumbers)
 创建订阅所有行的读端。
static nsp_read< TDerived, TACTOR, T > & instance_readpart (TDerived *aactor, const std::set< i32_fieldnumber > &afieldnumbers, const std::set< i64_actorid > &aids)
 创建仅订阅选定行的读端。
static i64_actorid to_actorid (i64_actorid adataid)
 将行ID重新标记为底层NSP服务器使用的拥有者Actor类型。

Detailed Description

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

NSP读端模板类,用于订阅和接收来自NSP服务器的远程数据同步。

提供只读数据订阅功能,支持全量订阅和部分行订阅两种模式。 内部维护一份本地数据镜像,通过字段权限控制只同步允许的protobuf字段。 支持变更回调、删除回调和首次同步完成回调三种事件通知。

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

Member Function Documentation

◆ exit()

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

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

退出读端:清除定时器,向所有相关节点发送退出通知,并销毁单例。

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

◆ get_mapconst()

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

获取完整的镜像映射。

获取完整的镜像映射。

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

◆ getconst()

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

读取一个镜像行。

读取一个镜像行。

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

◆ handle() [1/4]

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

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

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

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

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

◆ handle() [2/4]

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

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

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

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

◆ handle() [3/4]

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

处理数据ID同步消息,更新对等节点的字段权限。

处理数据ID同步消息。

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

随着新对等节点类型加入通道,更新字段权限映射表和退出通知集合。

◆ handle() [4/4]

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

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

处理注册回复消息。

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

标记为已注册,清除定时器,更新字段权限,并记录所有需要接收退出通知的对等节点。

◆ init()

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

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

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

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

◆ instance()

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

获取每个Actor的读端单例。

获取每个Actor的读端单例。

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

◆ instance_readall()

template<typename TDerived, typename TACTOR, typename T>
nsp_read< TDerived, TACTOR, T > & ngl::nsp_read< TDerived, TACTOR, T >::instance_readall ( TDerived * aactor,
const std::set< i32_fieldnumber > & afieldnumbers )
static

创建订阅所有行的读端。

创建订阅所有行的读端。

Parameters
aactor拥有者Actor指针
afieldnumbers需要同步的字段编号集合
Returns
nsp_read& 创建的读端实例引用
Parameters
aactor拥有者Actor指针
afieldnumbers需要同步的字段编号集合
Returns
nsp_read& 创建的读端实例引用

◆ instance_readpart()

template<typename TDerived, typename TACTOR, typename T>
nsp_read< TDerived, TACTOR, T > & ngl::nsp_read< TDerived, TACTOR, T >::instance_readpart ( TDerived * aactor,
const std::set< i32_fieldnumber > & afieldnumbers,
const std::set< i64_actorid > & aids )
static

创建仅订阅选定行的读端。

创建仅订阅选定行的读端。

Parameters
aactor拥有者Actor指针
afieldnumbers需要同步的字段编号集合
aids需要订阅的行数据ID集合
Returns
nsp_read& 创建的读端实例引用
Parameters
aactor拥有者Actor指针
afieldnumbers需要同步的字段编号集合
aids需要订阅的行数据ID集合
Returns
nsp_read& 创建的读端实例引用

◆ set_changedatafun()

template<typename TDerived, typename TACTOR, typename T>
void ngl::nsp_read< 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_read< 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_read< 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_read< 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: