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

Actor基类,提供所有Actor的通用功能。 More...

#include <actor_base.h>

Inheritance diagram for ngl::actor_base:
actor_manage_test_case::TestManagedActor ngl::actor ngl::actor_events< ENUM_EVENTS_LOGIC, eevents_logic, eevents_logic_count > ngl::actor_events< ENUM_EVENTS_MAP, eevents_map, eevents_map_count > ngl::actor_example< actor_example_guess_number > ngl::actor_activity_manage ngl::actor_brief ngl::actor_chat ngl::actor_client ngl::actor_create ngl::actor_csvclient ngl::actor_csvserver ngl::actor_db< TDBTAB_TYPE, TDBTAB > ngl::actor_demo01 ngl::actor_demo01_manager ngl::actor_demo03 ngl::actor_demo03_manager ngl::actor_events< ETYPE, E_EVENTS, E_EVENTS_COUNT > ngl::actor_example< TACTOR > ngl::actor_example_manage ngl::actor_example_match ngl::actor_family ngl::actor_friends ngl::actor_gateway ngl::actor_gateway_c2g ngl::actor_gateway_g2c ngl::actor_gm ngl::actor_gmclient ngl::actor_kcp ngl::actor_keyvalue ngl::actor_log ngl::actor_login ngl::actor_mail ngl::actor_notice ngl::actor_ranklist ngl::actor_robot ngl::actor_robot_manage ngl::actor_role ngl::actor_role_manage ngl::actor_server ngl::actor_testai ngl::actor_testlua ngl::actor_testlua2

Public Types

template<typename ... ARG>
using create_fun = std::function<std::shared_ptr<actor_base>(i16_area, i32_actordataid, ARG...)>

Public Member Functions

 actor_base (const actorparmbase &aparm)
 Actor基类构造函数
nreadyready ()
std::unique_ptr< nmanage_dbclient > & manage_dbclient ()
void set_db_component (ndb_component *acomponent)
void db_component_init_data ()
void init_db_component (bool acreate)
void add_dbclient (ndbclient_base *adbclient, i64_actorid aid)
template<pbdb::ENUM_DB DBTYPE, typename TDBTAB, typename TACTOR>
bool handle_db (const message< np_actordb_load_response< DBTYPE, TDBTAB > > &adata)
virtual void init ()
virtual actor_stat activity_stat ()=0
virtual void set_activity_stat (actor_stat astat)=0
virtual bool list_empty ()=0
virtual bool pending_empty ()=0
virtual bool high_empty ()=0
virtual bool actor_handle (i32_threadid athreadid)=0
virtual bool push (handle_pram &apram)=0
virtual void handle_after (handle_pram &)
virtual void loaddb_finish (pbdb::ENUM_DB atype, enum_dbstat astat)
virtual void release ()=0
virtual void erase_actor_before ()
virtual void save ()
bool is_single () const
const nguidguid () const
i64_actorid id_guid () const
i32_actordataid id () const
i16_area area () const
ENUM_ACTOR type () const
virtual void erase_actor ()
 从actor_manage中注销并销毁此Actor
bool nscript_using () const
bool nscript_db_loadfinish () const
template<typename T>
bool nscript_data_push (const char *asource, const T &adata, bool aedit)
template<typename T>
bool nscript_data_del (int64_t adataid)
template<typename T>
bool nscript_data_checkout (int64_t adataid, T &adata)
template<typename T>
bool nscript_data_checkout (std::map< int64_t, T > &adata)
template<typename T>
bool nscript_data_checkdel (int64_t adataid)
template<typename T>
bool nscript_data_checkdel (std::vector< int64_t > &adeldata)
template<typename T>
bool nscript_handle (const T &adata)
void kcp_setindex (i32_serverid aserverid, pbnet::ENUM_KCP aenum, i16_port akcpindex)
std::optional< i16_portkcp_index (i32_serverid aserverid, pbnet::ENUM_KCP aenum)
std::optional< i16_portkcp_index (int16_t aservertid, int16_t atcount, pbnet::ENUM_KCP aenum)
bool kcp_connect (i16_port auport, const std::string &aip, i16_port aprot, i64_actorid aactoridserver, std::string &akcpsession) const
int64_t set_timer (const np_timerparm &aparm)
 为当前Actor设置定时器
bool isbroadcast () const
void set_broadcast (bool aisbroadcast)
template<typename T>
void handle_print (const message< T > &adata) const

Static Public Member Functions

static void erase_actor (const nguid &aguid)
static std::shared_ptr< packjsonpack (const std::string &apbname, const std::string &ajson, i64_actorid aactorid, i64_actorid arequestactorid, bool ahead=false)
template<typename T>
static std::shared_ptr< packnet_pack (T &adata, i64_actorid aactorid, i64_actorid arequestactorid, bool ahead=false)
static bool send_pack (i32_sessionid asession, std::shared_ptr< pack > &apack)
template<typename T>
static bool send (i32_sessionid asession, const T &adata, i64_actorid aactorid, i64_actorid arequestactorid)
template<typename T>
static bool send_server (i32_serverid aserverid, const T &adata, i64_actorid aactorid, i64_actorid arequestactorid)
template<typename T>
static bool send_server (const std::set< i32_serverid > &aserverids, const T &adata, i64_actorid aactorid, i64_actorid arequestactorid)
static bool send_server (i32_serverid aserverid, std::shared_ptr< pack > &apack)
static bool kcp_sendpack (i64_actorid aactorid, std::shared_ptr< pack > &adata, i16_port auport=0)
static bool kcp_sendpack (const std::set< i64_actorid > &aactorids, std::shared_ptr< pack > &adata, i16_port auport=0)
template<typename T>
static bool kcp_send (i64_actorid aactorid, const T &adata, i16_port auport=0)
 向单个Actor发送KCP数据(actor_base模板实现)。
template<typename T>
static bool kcp_send (const std::set< i64_actorid > &aactorids, const T &adata, i16_port auport=0)
 向一组Actor广播KCP数据(actor_base模板实现)。
static i64_actorid actorclient_guid ()
template<typename T>
static void send_client (const std::set< i64_actorid > &aids, const T &adata, ENET_PROTOCOL aprotocol=ENET_TCP)
template<typename T>
static void send_client (i64_actorid aid, const T &adata, ENET_PROTOCOL aprotocol=ENET_TCP)
template<typename T>
static void send_client (const std::vector< i64_actorid > &aids, const T &adata, ENET_PROTOCOL aprotocol=ENET_TCP)
template<typename T>
static void send_client (const T &adata, ENET_PROTOCOL aprotocol=ENET_TCP)
template<typename T>
static void send_clientbyarea (i16_area aarea, const T &adata, ENET_PROTOCOL aprotocol=ENET_TCP)
static void send_actor (const nguid &aguid, const std::shared_ptr< pack > &adata)
 向指定Actor发送消息包
template<typename T, bool IS_SEND = true>
static void send_actor (ENUM_ACTOR atype, const std::shared_ptr< T > &adata)
template<typename T, bool IS_SEND = true>
static void send_actor (const nguid &aguid, const nguid &arequestguid, const std::shared_ptr< T > &adata)
template<typename T, bool IS_SEND = true>
static void send_actor (const nguid &aguid, const nguid &arequestguid, const std::shared_ptr< T > &adata, const std::function< void()> &afailfun)
template<typename T, bool IS_SEND = true>
static void send_actor (const std::set< i64_actorid > &asetguid, const nguid &arequestguid, const std::shared_ptr< T > &adata)
static void start_broadcast ()
 启动全局广播定时器
template<typename TDerived>
static void first_nregister (ENUM_ACTOR atype)
template<typename TACTOR, typename ... ARG>
static std::shared_ptr< actor_basecreate (i16_area aarea, i32_actordataid aid, ARG &&... args)
 actor工厂方法(编译期类型)
template<typename ... ARG>
static std::map< ENUM_ACTOR, create_fun< ARG... > > & creators ()
template<ENUM_ACTOR EACTOR, typename TACTOR, typename ... ARG>
static void cregister ()
template<typename ... ARG>
static std::shared_ptr< actor_basecreate (ENUM_ACTOR atype, i16_area aarea, i32_actordataid aid, ARG &&... args)
 actor工厂方法(运行时类型,查分桶表转调编译期create<TACTOR>)

Detailed Description

Actor基类,提供所有Actor的通用功能。

Actor是游戏服务器的基本执行单元,每个Actor代表一个独立的逻辑实体。 该基类提供了以下核心功能:

  • 身份标识和生命周期管理
  • 数据库集成和持久化
  • 消息处理和路由
  • 脚本扩展支持
  • 网络通信接口
  • 定时器和事件处理

派生类需要实现纯虚函数来定义具体的行为。

Constructor & Destructor Documentation

◆ actor_base()

ngl::actor_base::actor_base ( const actorparmbase & aparm)
explicit

Actor基类构造函数

初始化GUID、DB管理器(可选)和脚本VM(可选), 并注册DB加载就绪检查。

Parameters
aparmActor构造参数

Member Function Documentation

◆ activity_stat()

virtual actor_stat ngl::actor_base::activity_stat ( )
pure virtual

Implemented in ngl::actor.

◆ actor_handle()

virtual bool ngl::actor_base::actor_handle ( i32_threadid athreadid)
pure virtual

Implemented in ngl::actor.

◆ create() [1/2]

template<typename ... ARG>
std::shared_ptr< actor_base > ngl::actor_base::create ( ENUM_ACTOR atype,
i16_area aarea,
i32_actordataid aid,
ARG &&... args )
static

actor工厂方法(运行时类型,查分桶表转调编译期create<TACTOR>)

以运行时atype查“构造签名为ARG...”的那张工厂表(须先经cregister登记)。 ARG...由调用实参推导,经decay后须与登记时完全一致(含指针const限定), 否则查到的是另一张空表并返回nullptr。

Template Parameters
ARG构造实参类型包(决定查哪张表)
Returns
创建的actor智能指针;类型未登记或GUID冲突时返回nullptr

◆ create() [2/2]

template<typename TACTOR, typename ... ARG>
std::shared_ptr< actor_base > ngl::actor_base::create ( i16_area aarea,
i32_actordataid aid,
ARG &&... args )
static

actor工厂方法(编译期类型)

根据编译期模板参数TACTOR创建派生类实例,完成消息分发表初始化、 NSP注册和调度器注册。actor类型枚举通过TACTOR::actor_type()推导。 aarea/aid仅用于生成guid与查重;构造函数参数完全由args...提供。

Template Parameters
TACTORactor派生类型(须派生自actor_base且提供静态actor_type())
ARG转发给TACTOR构造函数的参数包类型
Returns
创建的actor智能指针;GUID冲突时返回nullptr
Note
实现置于actor_manage.h,使所有包含本头的翻译单元可见完整定义, 避免模板"只声明未定义"的链接错误(与send_actor等静态模板一致)。

◆ erase_actor_before()

◆ handle_after()

virtual void ngl::actor_base::handle_after ( handle_pram & )
inlinevirtual

◆ high_empty()

virtual bool ngl::actor_base::high_empty ( )
pure virtual

Implemented in ngl::actor.

◆ init()

◆ kcp_send() [1/2]

template<typename T>
bool ngl::actor_base::kcp_send ( const std::set< i64_actorid > & aactorids,
const T & adata,
i16_port auport = 0 )
staticnodiscard

向一组Actor广播KCP数据(actor_base模板实现)。

Template Parameters
T数据类型,需支持 net_pack<T>::npack 序列化。
Parameters
aactorids目标Actor ID集合。
adata待发送的数据引用。
auportKCP端口号,默认为0(自动选择)。
Returns
发送成功返回 true,失败返回 false。

◆ kcp_send() [2/2]

template<typename T>
bool ngl::actor_base::kcp_send ( i64_actorid aactorid,
const T & adata,
i16_port auport = 0 )
staticnodiscard

向单个Actor发送KCP数据(actor_base模板实现)。

Template Parameters
T数据类型,需支持 net_pack<T>::npack 序列化。
Parameters
aactorid目标Actor ID。
adata待发送的数据引用。
auportKCP端口号,默认为0(自动选择)。
Returns
发送成功返回 true,失败返回 false。

◆ list_empty()

virtual bool ngl::actor_base::list_empty ( )
pure virtual

Implemented in ngl::actor.

◆ loaddb_finish()

◆ pending_empty()

virtual bool ngl::actor_base::pending_empty ( )
pure virtual

Implemented in ngl::actor.

◆ push()

virtual bool ngl::actor_base::push ( handle_pram & apram)
pure virtual

Implemented in ngl::actor.

◆ release()

virtual void ngl::actor_base::release ( )
pure virtual

Implemented in ngl::actor.

◆ send_actor()

void ngl::actor_base::send_actor ( const nguid & aguid,
const std::shared_ptr< pack > & adata )
static

向指定Actor发送消息包

Parameters
aguid目标Actor的GUID
adata消息包智能指针

◆ set_activity_stat()

virtual void ngl::actor_base::set_activity_stat ( actor_stat astat)
pure virtual

Implemented in ngl::actor.

◆ set_timer()

int64_t ngl::actor_base::set_timer ( const np_timerparm & aparm)

为当前Actor设置定时器

Parameters
aparm定时器参数
Returns
定时器ID

◆ start_broadcast()

void ngl::actor_base::start_broadcast ( )
static

启动全局广播定时器

定期向所有Actor投递np_actor_broadcast消息。


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