|
ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
|
客户端类型节点的路由Actor More...
#include <actor_client.h>
Public Member Functions | |
| bool | handle (const message< np_connect_actor_server > &adata) |
| 处理: 与actor_server的网络连接已建立 | |
| bool | handle (const message< np_actor_server_register > &adata) |
| 处理: 在远程actor_server上注册本节点 | |
| bool | handle (const message< np_actornode_register_response > &adata) |
| 处理: actor_server响应节点注册 | |
| bool | handle (const message< np_actorclient_node_connect > &adata) |
| 处理: actor_client节点连接请求 | |
| bool | handle (const message< np_actornode_update > &adata) |
| 处理: actor_server向本客户端推送更新的节点信息 | |
| bool | handle (const message< np_actornode_update_mass > &adata) |
| 处理: 批量节点信息更新(带可选完成回调) | |
| bool | handle (const message< np_actornode_connect_task > &adata) |
| 处理: 连接完全建立后执行延迟任务 | |
| bool | handle (const message< np_actor_gatewayid_updata > &adata) |
| 处理: 同步actor_role到网关的映射关系 | |
| Public Member Functions inherited from ngl::actor | |
| template<typename TDerived> | |
| void | init_rfun () |
| 初始化消息分发器。 | |
| actor (const actorparm &aparm) | |
| 构造函数。 | |
| actor_stat | activity_stat () final |
| 获取调度器可见的生命周期状态。 | |
| void | set_activity_stat (actor_stat astat) final |
| 更新调度器可见的生命周期状态。 | |
| void | release () final |
| 停止actor,排空队列中的工作,并持久化DB支持的状态。 | |
| bool | list_empty () final |
| 检查普通队列和优先级队列是否都为空。 | |
| bool | pending_empty () final |
| 检查高优先级队列是否为空 | |
| bool | high_empty () final |
| 检查优先级队列是否为空。 | |
| std::optional< int32_t > | hight_value () |
| 获取当前最高优先级值。 | |
| bool | push (handle_pram &apram) final |
| 将传入任务入队到相应的优先级队列。 | |
| bool | actor_handle (i32_threadid athreadid) final |
| 在指定的工作线程上运行一个调度切片。 | |
| template<typename T> | |
| bool | ahandle (const std::shared_ptr< T > &aparm) |
| 处理类型化消息。 | |
| bool | ahandle (i32_threadid athreadid, handle_pram &aparm) |
| 处理消息队列中的消息。 | |
| virtual void | broadcast () |
| 广播消息处理钩子。 | |
| bool | handle_broadcast (const message< np_actor_broadcast > &adata) |
| 合成广播消息的内部入口点。 | |
| bool | handle_close (const message< np_actor_close > &) |
| 合成关闭消息的内部入口点。 | |
| template<typename TMESSAGE> | |
| bool | handle_script (const message< TMESSAGE > &adata) |
| 将类型化消息转发到附加的脚本运行时。 | |
| Public Member Functions inherited from ngl::actor_base | |
| actor_base (const actorparmbase &aparm) | |
| Actor基类构造函数 | |
| nready & | ready () |
| 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 void | handle_after (handle_pram &) |
| virtual void | loaddb_finish (pbdb::ENUM_DB atype, enum_dbstat astat) |
| virtual void | erase_actor_before () |
| virtual void | save () |
| bool | is_single () const |
| const nguid & | guid () 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_port > | kcp_index (i32_serverid aserverid, pbnet::ENUM_KCP aenum) |
| std::optional< i16_port > | kcp_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 | create () |
| static void | nregister () |
| 注册此Actor的消息处理器 | |
| static void | actor_server_register () |
| 向所有已知的actor_server实例注册本节点 | |
| static i64_actorid | actorid () |
| 返回actor_client的单例Actor ID | |
| Static Public Member Functions inherited from ngl::actor | |
| template<typename TDerived> | |
| static void | register_timer (Tfun< TDerived, np_timerparm > afun=&TDerived::timer_handle) |
| 注册定时器回调函数。 | |
| template<typename TDerived, typename T> | |
| static void | register_actor_s (const std::function< void(TDerived *, const message< T > &)> &afun) |
| 注册基于std::function的消息处理器。 | |
| template<typename TDerived, typename ... ARG> | |
| static void | register_actor (ARG... afun) |
| 注册一个或多个强类型消息处理器。 | |
| template<typename TDerived, typename T> | |
| static void | register_actornonet (const Tfun< TDerived, T > afun) |
| 注册本地专用消息处理器(不来自网络协议分发)。 | |
| template<typename TDerived, typename ... ARG> | |
| static void | register_handle () |
| 注册TDerived::handle作为消息处理器。 | |
| template<typename TDerived, typename ... ARG> | |
| static void | register_script_handle () |
| 注册脚本支持的消息处理器。 | |
| template<typename TDerived, typename ... ARG> | |
| static void | register_forward_c2g () |
| 注册客户端到网关的转发处理器。 | |
| template<typename TDerived, typename ... ARG> | |
| static void | register_forward_g2c () |
| 注册网关到客户端的转发处理器。 | |
| template<typename TDerived, ENUM_ACTOR ACTOR, typename ... ARG> | |
| static void | register_secondary_forward_c2g () |
| 注册中继actor的二级转发辅助器。 | |
| Static Public Member Functions inherited from ngl::actor_base | |
| static void | erase_actor (const nguid &aguid) |
| static std::shared_ptr< pack > | jsonpack (const std::string &apbname, const std::string &ajson, i64_actorid aactorid, i64_actorid arequestactorid, bool ahead=false) |
| template<typename T> | |
| static std::shared_ptr< pack > | net_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_base > | create (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_base > | create (ENUM_ACTOR atype, i16_area aarea, i32_actordataid aid, ARG &&... args) |
| actor工厂方法(运行时类型,查分桶表转调编译期create<TACTOR>) | |
Friends | |
| class | actor_instance< actor_client > |
Additional Inherited Members | |
| Public Types inherited from ngl::actor_base | |
| template<typename ... ARG> | |
| using | create_fun = std::function<std::shared_ptr<actor_base>(i16_area, i32_actordataid, ARG...)> |
客户端类型节点的路由Actor
每个节点根据其角色运行actor_client或actor_server。 actor_server用于区服节点;actor_client用于所有其他节点。 actor_client存储nguid到远程服务器ID的映射, 并将消息转发到目标节点的actor_server进行最终投递。
| bool ngl::actor_client::handle | ( | const message< np_actor_gatewayid_updata > & | adata | ) |
处理: 同步actor_role到网关的映射关系
处理网关ID更新消息
更新或删除角色到网关的映射关系。
| [in] | adata | 网关更新消息 |
| bool ngl::actor_client::handle | ( | const message< np_actor_server_register > & | adata | ) |
处理: 在远程actor_server上注册本节点
处理服务器注册消息
连接到所有配置的actor服务器节点并注册当前节点。
| [in] | adata | 注册消息数据 |
| bool ngl::actor_client::handle | ( | const message< np_actorclient_node_connect > & | adata | ) |
处理: actor_client节点连接请求
处理节点连接消息
处理被动连接方的节点连接请求,更新地址表,建立池连接, 通知登录服务器新连接。
| [in] | adata | 节点连接消息 |
| bool ngl::actor_client::handle | ( | const message< np_actornode_connect_task > & | adata | ) |
处理: 连接完全建立后执行延迟任务
处理连接任务消息
如果目标服务器已连接则立即执行回调,否则延迟到连接完成后执行。
| [in] | adata | 连接任务消息 |
| bool ngl::actor_client::handle | ( | const message< np_actornode_register_response > & | adata | ) |
处理: actor_server响应节点注册
处理节点注册响应
收到注册响应后,遍历已知节点列表,对未连接的节点建立连接。
| [in] | adata | 注册响应消息 |
| bool ngl::actor_client::handle | ( | const message< np_actornode_update > & | adata | ) |
处理: actor_server向本客户端推送更新的节点信息
处理节点地址更新消息
更新地址表中的actor-server映射和网关映射。
| [in] | adata | 节点更新消息 |
| bool ngl::actor_client::handle | ( | const message< np_actornode_update_mass > & | adata | ) |
处理: 批量节点信息更新(带可选完成回调)
处理批量节点更新消息
处理地址表更新并转发给actor_server,执行完成回调。
| [in] | adata | 批量更新消息 |