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

机器人管理Actor,生成和协调多个机器人实例。 More...

#include <actor_robot_manage.h>

Inheritance diagram for ngl::actor_robot_manage:
ngl::actor ngl::actor_base

Public Member Functions

virtual void init ()
 初始化机器人管理Actor
virtual void loaddb_finish (pbdb::ENUM_DB atype, enum_dbstat astat)
 数据库加载完成回调
std::shared_ptr< actor_robotcreate (i16_area aarea, i32_actordataid aroleid)
 创建单个机器人Actor实例
void login (const std::string &aaccount, const std::string &apasswold, ENET_PROTOCOL aprotocol=ENET_TCP)
 发起机器人登录请求
void create_robots (const std::string &arobotname, int abeg, int aend, ENET_PROTOCOL aprotocol=ENET_TCP)
 批量创建机器人并登录
void create_robot (const std::string &arobotname, ENET_PROTOCOL aprotocol=ENET_TCP)
 创建单个机器人并使用默认密码登录
template<typename TFun>
void foreach (const TFun &afun)
 遍历所有机器人实例
_robotget_robot (const std::string &aacount)
 根据账号名查找机器人
_robotget_robot (i64_actorid aroleid)
 根据角色ActorID查找机器人
template<typename T>
void send (_robot *arobot, const T &adata)
 向指定机器人发送消息
bool getdata (_robot *arobot)
 获取机器人数据(检查有效性)
bool kcp_connect (i64_actorid arobotid, pbnet::ENUM_KCP akcpenum, int16_t aservertid, int16_t atcount, i64_actorid aseractorid)
 发起KCP可靠UDP连接
void help ()
 打印机器人命令帮助信息
bool handle (const message< np_robot_pram > &adata)
 处理机器人命令行指令
bool handle (const message< np_ukcp_waitrecv > &adata)
 处理KCP公网IP获取回调
bool handle (const message< pbnet::PROBUFF_NET_ACOUNT_LOGIN_RESPONSE > &adata)
 处理账号登录响应
bool handle (const message< pbnet::PROBUFF_NET_ROLE_NOT_CREATE > &adata)
 处理角色未创建响应
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基类构造函数
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 handle_after (handle_pram &)
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 create ()
static ENUM_ACTOR actor_type ()
 返回Actor类型 ACTOR_ROBOT_MANAGE
static i64_actorid actorid ()
 生成机器人管理Actor的唯一ActorID
static void nregister ()
 注册消息处理器
static bool check_connect (i32_serverid aserverid, ENET_PROTOCOL aprotocol)
 检查目标服务器是否可连接
static bool connect (i32_serverid aserverid, ENET_PROTOCOL aprotocol, const std::function< void(i32_sessionid)> &afun)
 连接到目标服务器
static bool parse_command (std::string aparm)
 解析并执行机器人命令字符串
template<typename T>
static bool send_role (i64_actorid aroleid, const T &adata)
 向指定角色ID的机器人发送消息
static actor_robot_manage * get ()
 获取全局机器人管理器单例
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< 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>)

Public Attributes

std::map< std::string, _robotm_maprobot
std::map< i64_actorid, _robot * > m_maprobotbyactorid

Friends

class actor_instance< actor_robot_manage >

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...)>

Detailed Description

机器人管理Actor,生成和协调多个机器人实例。

负责机器人实例的创建、登录和生命周期管理。 支持批量创建机器人、WebSocket/TCP连接管理、KCP可靠UDP连接。 提供命令行接口用于机器人控制和压力测试。

Member Function Documentation

◆ actorid()

i64_actorid ngl::actor_robot_manage::actorid ( )
static

生成机器人管理Actor的唯一ActorID

Returns
ActorID(使用none_actordataid)

◆ check_connect()

bool ngl::actor_robot_manage::check_connect ( i32_serverid aserverid,
ENET_PROTOCOL aprotocol )
static

检查目标服务器是否可连接

Parameters
aserverid目标服务器ID
aprotocol网络协议类型
Returns
可连接返回true

◆ connect()

bool ngl::actor_robot_manage::connect ( i32_serverid aserverid,
ENET_PROTOCOL aprotocol,
const std::function< void(i32_sessionid)> & afun )
static

连接到目标服务器

Parameters
aserverid目标服务器ID
aprotocol网络协议类型(WS或TCP)
afun连接建立后的回调,接收sessionID
Returns
连接发起成功返回true

◆ create()

std::shared_ptr< actor_robot > ngl::actor_robot_manage::create ( i16_area aarea,
i32_actordataid aroleid )

创建单个机器人Actor实例

Parameters
aarea逻辑区域
aroleid角色数据ID
Returns
指向新创建的actor_robot的shared_ptr

◆ create_robot()

void ngl::actor_robot_manage::create_robot ( const std::string & arobotname,
ENET_PROTOCOL aprotocol = ENET_TCP )

创建单个机器人并使用默认密码登录

Parameters
arobotname机器人名称(用作账号名)
aprotocol网络协议类型

◆ create_robots()

void ngl::actor_robot_manage::create_robots ( const std::string & arobotname,
int abeg,
int aend,
ENET_PROTOCOL aprotocol = ENET_TCP )

批量创建机器人并登录

Parameters
arobotname机器人名称前缀
abeg起始编号
aend结束编号
aprotocol网络协议类型

机器人名格式为 "{arobotname}{编号}",如 "robot1"、"robot2"

◆ foreach()

template<typename TFun>
void ngl::actor_robot_manage::foreach ( const TFun & afun)
inline

遍历所有机器人实例

Template Parameters
TFun回调函数类型,接受 _robot& 参数
Parameters
afun对每个机器人执行的回调函数

◆ get()

actor_robot_manage * ngl::actor_robot_manage::get ( )
static

获取全局机器人管理器单例

Returns
指向actor_robot_manage的全局指针

◆ get_robot() [1/2]

_robot * ngl::actor_robot_manage::get_robot ( const std::string & aacount)

根据账号名查找机器人

Parameters
aacount账号名
Returns
指向_robot结构的指针,未找到返回nullptr

◆ get_robot() [2/2]

_robot * ngl::actor_robot_manage::get_robot ( i64_actorid aroleid)

根据角色ActorID查找机器人

Parameters
aroleid角色ActorID
Returns
指向_robot结构的指针,未找到返回nullptr

◆ getdata()

bool ngl::actor_robot_manage::getdata ( _robot * arobot)

获取机器人数据(检查有效性)

Parameters
arobot机器人指针
Returns
非nullptr返回true

◆ handle() [1/4]

bool ngl::actor_robot_manage::handle ( const message< np_robot_pram > & adata)

处理机器人命令行指令

支持的命令包括:login/logins(登录)、c/d(发送命令)、kcp(KCP连接)、 kcp_gettime/kcp_protocol(KCP操作)、protocol(协议发送)、test_thruput(吞吐量测试)

Parameters
adata命令参数消息
Returns
始终返回true

◆ handle() [2/4]

bool ngl::actor_robot_manage::handle ( const message< np_ukcp_waitrecv > & adata)

处理KCP公网IP获取回调

收到本地公网IP后,向服务端请求KCP会话建立

Parameters
adataKCP等待接收消息
Returns
成功返回true

◆ handle() [3/4]

bool ngl::actor_robot_manage::handle ( const message< pbnet::PROBUFF_NET_ACOUNT_LOGIN_RESPONSE > & adata)

处理账号登录响应

创建机器人Actor实例,连接网关服务器,发送角色登录请求

Parameters
adata登录响应消息
Returns
始终返回true

◆ handle() [4/4]

bool ngl::actor_robot_manage::handle ( const message< pbnet::PROBUFF_NET_ROLE_NOT_CREATE > & adata)

处理角色未创建响应

自动生成角色名并发送创建角色请求

Parameters
adata角色未创建消息
Returns
始终返回true

◆ help()

void ngl::actor_robot_manage::help ( )

打印机器人命令帮助信息

显示所有支持的命令:login、logins、c、d、kcp、kcp_gettime、kcp_protocol、protocol、test_thruput、release_thruput

◆ init()

void ngl::actor_robot_manage::init ( )
virtual

初始化机器人管理Actor

当前为空实现,DB绑定和定时器设置被注释

Reimplemented from ngl::actor_base.

◆ kcp_connect()

bool ngl::actor_robot_manage::kcp_connect ( i64_actorid arobotid,
pbnet::ENUM_KCP akcpenum,
int16_t aservertid,
int16_t atcount,
i64_actorid aseractorid )

发起KCP可靠UDP连接

Parameters
arobotid机器人ActorID
akcpenumKCP类型(GATEWAY或ROLE)
aservertid目标服务器线程ID
atcount目标服务器线程数
aseractorid服务端ActorID
Returns
连接发起成功返回true

◆ loaddb_finish()

void ngl::actor_robot_manage::loaddb_finish ( pbdb::ENUM_DB atype,
enum_dbstat astat )
virtual

数据库加载完成回调

Parameters
atype加载完成的数据库表类型
astat加载状态

Reimplemented from ngl::actor_base.

◆ login()

void ngl::actor_robot_manage::login ( const std::string & aaccount,
const std::string & apasswold,
ENET_PROTOCOL aprotocol = ENET_TCP )

发起机器人登录请求

Parameters
aaccount账号名
apasswold密码
aprotocol网络协议类型(WS或TCP)

◆ nregister()

void ngl::actor_robot_manage::nregister ( )
static

注册消息处理器

注册定时器和四类消息:np_robot_pram(命令)、np_ukcp_waitrecv(KCP回调)、 PROBUFF_NET_ACOUNT_LOGIN_RESPONSE(登录响应)、PROBUFF_NET_ROLE_NOT_CREATE(角色未创建)

◆ parse_command()

bool ngl::actor_robot_manage::parse_command ( std::string aparm)
static

解析并执行机器人命令字符串

Parameters
aparm命令字符串(如"login robot1 ws")
Returns
始终返回true

◆ send()

template<typename T>
void ngl::actor_robot_manage::send ( _robot * arobot,
const T & adata )
inline

向指定机器人发送消息

Template Parameters
T消息类型
Parameters
arobot目标机器人指针
adata消息数据

◆ send_role()

template<typename T>
bool ngl::actor_robot_manage::send_role ( i64_actorid aroleid,
const T & adata )
inlinestatic

向指定角色ID的机器人发送消息

Template Parameters
T消息类型
Parameters
aroleid目标角色ActorID
adata消息数据
Returns
发送成功返回true,机器人不存在则返回false

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