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

具体的数据库客户端实现,绑定单个数据库表。 More...

#include <ndbclient.h>

Inheritance diagram for ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >:
ngl::ndbclient_base

Public Member Functions

void load () final
 延迟实际的数据库请求,直到actor_client确认数据库节点已连接。
bool create (const nguid &aid) final
 创建新的数据记录。
void set_actor (actor_base *aactor)
 将此dbclient绑定到其拥有者Actor和管理器。
std::map< nguid, data_modified< TDBTAB > > & get_data ()
 返回完整的已加载数据集。
const std::map< nguid, data_modified< TDBTAB > > & get_data () const
std::map< nguid, data_modified< TDBTAB > > & get_foreach_data ()
data_modified< TDBTAB > * get_data (const nguid &aid)
 获取或惰性创建指定GUID的行包装器。
data_modified< TDBTAB > * get_dbdata ()
 当此dbclient指向单个Actor时返回主行。
void init (nmanage_dbclient *amdb, actor_base *aactor, const nguid &aid) final
 初始化数据库客户端。
bool isload () final
 检查数据是否已加载完成。
void savedb () final
 将修改保存到数据库。
void savedb (const nguid &aid)
void clear ()
void del (const nguid &aid, bool ascript=false)
void del (std::vector< int64_t > &adelvec, bool ascript=false)
void deldb () final
 从数据库删除数据。
void nscript_push_data () final
 将数据库数据推送到脚本运行时。
bool loadfinish (const std::map< nguid, TDBTAB > &adata, enum_dbstat astat, bool aloadfinish)
bool handle (const message< np_actordb_load_response< DBTYPE, TDBTAB > > &adata)
void clear_modified () final
 清除所有修改标记。
Public Member Functions inherited from ngl::ndbclient_base
pbdb::ENUM_DB type () const
 获取数据库类型。

Additional Inherited Members

Protected Member Functions inherited from ngl::ndbclient_base
 ndbclient_base (pbdb::ENUM_DB atype)

Detailed Description

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
class ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >

具体的数据库客户端实现,绑定单个数据库表。

该模板类实现了数据库客户端的具体功能,包括:

  • 数据加载和保存
  • 脏数据跟踪
  • 脚本运行时协调
  • 异步数据库操作
  • 批量操作支持

模板参数:

  • DBTYPE: 数据库表类型枚举
  • TDBTAB: 数据库表结构体类型
  • TACTOR: 拥有此客户端的Actor类型

使用示例:

// 在Actor中声明数据库客户端
ndbclient<ENUM_DB_ROLE, tab_role, actor_role> m_role_db;
// 初始化
m_role_db.init(this, actor_manage::instance().get_manage_dbclient(), role_id);
// 获取数据
auto* data = m_role_db.get_data(role_id);
if (data != nullptr) {
// 修改数据
data->get()->set_name("new_name");
}

Member Function Documentation

◆ clear_modified()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::clear_modified ( )
inlinefinalvirtual

清除所有修改标记。

Implements ngl::ndbclient_base.

◆ create()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
bool ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::create ( const nguid & aid)
inlinefinalvirtual

创建新的数据记录。

Parameters
aid记录ID
Returns
bool 创建是否成功

Implements ngl::ndbclient_base.

◆ deldb()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::deldb ( )
inlinefinalvirtual

从数据库删除数据。

Note
删除标记为待删除的数据

先序列化,以便actor_client可以转发现成的网络包。

数据库Actor请求通过正常的Actor路由路径运行。

Implements ngl::ndbclient_base.

◆ init()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::init ( nmanage_dbclient * amdb,
actor_base * aactor,
const nguid & aid )
inlinefinalvirtual

初始化数据库客户端。

Parameters
amdb数据库管理器指针
aactor拥有此客户端的Actor指针
aid目标ID

每个具体的Actor/dbclient对仅注册一次数据库加载响应处理器。

Implements ngl::ndbclient_base.

◆ isload()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
bool ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::isload ( )
inlinefinalvirtual

检查数据是否已加载完成。

Returns
bool 是否已加载

Implements ngl::ndbclient_base.

◆ load()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::load ( )
inlinefinalvirtual

延迟实际的数据库请求,直到actor_client确认数据库节点已连接。

Implements ngl::ndbclient_base.

◆ nscript_push_data()

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::nscript_push_data ( )
inlinefinalvirtual

将数据库数据推送到脚本运行时。

Implements ngl::ndbclient_base.

◆ savedb() [1/2]

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::savedb ( )
inlinefinalvirtual

将修改保存到数据库。

Note
只保存标记为脏的数据

Implements ngl::ndbclient_base.

◆ savedb() [2/2]

template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
void ngl::ndbclient< DBTYPE, TDBTAB, TACTOR >::savedb ( const nguid & aid)
inline

此行已复制到此保存批次中,现在可以清除其脏位。

此批次消费了当前的已修改ID快照。


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