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

示例匹配 Actor More...

#include <actor_example_match.h>

Inheritance diagram for ngl::actor_example_match:
ngl::actor ngl::actor_base

Public Member Functions

virtual ~actor_example_match ()=default
 析构函数
virtual void init ()
 初始化,设置定时器并加载玩家简要数据
virtual void erase_actor_before ()
 Actor 销毁前回调,退出 NSP 简要数据实例
virtual void loaddb_finish (pbdb::ENUM_DB atype, enum_dbstat astat)
 数据库加载完成回调
void sync_match_info (room *aroom, i64_actorid aroleid=nguid::make())
 同步房间匹配信息给玩家
bool room_count_ready (room *aroom)
 检查房间是否已满员
roommatching_room (i64_actorid aroleid, pbexample::EPLAY_TYPE atype)
 为玩家寻找或创建匹配房间
roomfind_room (int32_t aroomid)
 通过房间 ID 查找房间(跨所有玩法类型)
roomfind_room (pbexample::EPLAY_TYPE atype, int32_t aroomid)
 通过玩法类型和房间 ID 查找房间
roomadd_room (pbexample::EPLAY_TYPE atype)
 创建新的匹配房间
void erase_room (room *aroom, pbexample::PLAY_MATCHING_EERROR_CODE aerrorcode=pbexample::PLAY_MATCHING_EERROR_CODE::EERROR_CODE_ROOM_DESTORY)
 销毁房间并通知所有玩家
void erase_player_room (room *aroom, i64_actorid aroleid)
 从房间中移除玩家
bool check_timeout (time_t atime, int32_t ainterval)
 检查时间是否已超时
void matching_finish (room *aroom)
 匹配完成,通知管理器创建玩法 Actor
bool check_ready (room *aroom)
 检查房间内所有玩家是否都已确认准备
bool timer_handle (const message< np_timerparm > &adata)
 定时器回调,处理房间超时逻辑
bool handle (const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_CANCEL > > &adata)
 处理取消匹配请求
bool handle (const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_JOIN > > &adata)
 处理加入匹配请求
bool handle (const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_PLAYER_CONFIRM > > &adata)
 处理玩家确认准备/拒绝请求
bool handle (const message< np_login_request_info > &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 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 ()
 创建 Actor 单例实例
static ENUM_ACTOR actor_type ()
 返回 Actor 类型枚举
static i64_actorid actorid ()
 生成 Actor 唯一 ID
static void nregister ()
 注册定时器和消息处理器(加入/取消/确认匹配、登录查询)
static void send_error (pbexample::PLAY_MATCHING_EERROR_CODE acode, std::set< i64_actorid > *aplayer=nullptr, int32_t aroomid=0, i64_actorid aroleid=nguid::make())
 发送匹配错误码给玩家
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>)

Friends

class actor_instance< actor_example_match >

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

负责玩家匹配系统的完整生命周期,包括房间创建、玩家加入/退出、 准备确认、超时处理及匹配完成后通知管理器创建玩法 Actor。 作为单例 Actor 运行,权重为 0x7fffffff(最高优先级)。

Member Function Documentation

◆ actor_type()

ENUM_ACTOR ngl::actor_example_match::actor_type ( )
static

返回 Actor 类型枚举

Returns
ENUM_ACTOR::ACTOR_EXAMPLE_MATCH

◆ actorid()

i64_actorid ngl::actor_example_match::actorid ( )
static

生成 Actor 唯一 ID

Returns
基于类型和合并区域的唯一标识

◆ add_room()

room * ngl::actor_example_match::add_room ( pbexample::EPLAY_TYPE atype)

创建新的匹配房间

Parameters
atype玩法类型
Returns
新创建的房间指针,配置无效时返回 nullptr

◆ check_ready()

bool ngl::actor_example_match::check_ready ( room * aroom)

检查房间内所有玩家是否都已确认准备

Parameters
aroom房间指针
Returns
true 全部已确认,false 有未确认的玩家

◆ check_timeout()

bool ngl::actor_example_match::check_timeout ( time_t atime,
int32_t ainterval )

检查时间是否已超时

Parameters
atime起始时间戳
ainterval超时间隔(秒)
Returns
true 已超时,false 未超时

◆ erase_actor_before()

void ngl::actor_example_match::erase_actor_before ( )
virtual

Actor 销毁前回调,退出 NSP 简要数据实例

Reimplemented from ngl::actor_base.

◆ erase_player_room()

void ngl::actor_example_match::erase_player_room ( room * aroom,
i64_actorid aroleid )

从房间中移除玩家

Parameters
aroom房间指针
aroleid要移除的玩家 ID

◆ erase_room()

void ngl::actor_example_match::erase_room ( room * aroom,
pbexample::PLAY_MATCHING_EERROR_CODE aerrorcode = pbexample::PLAY_MATCHING_EERROR_CODE::EERROR_CODE_ROOM_DESTORY )

销毁房间并通知所有玩家

Parameters
aroom房间指针
aerrorcode错误码(默认为房间销毁)

◆ find_room() [1/2]

room * ngl::actor_example_match::find_room ( int32_t aroomid)

通过房间 ID 查找房间(跨所有玩法类型)

Parameters
aroomid房间 ID
Returns
房间指针,未找到返回 nullptr

◆ find_room() [2/2]

room * ngl::actor_example_match::find_room ( pbexample::EPLAY_TYPE atype,
int32_t aroomid )

通过玩法类型和房间 ID 查找房间

Parameters
atype玩法类型
aroomid房间 ID
Returns
房间指针,未找到返回 nullptr

◆ handle() [1/4]

bool ngl::actor_example_match::handle ( const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_CANCEL > > & adata)

处理取消匹配请求

Parameters
adata消息数据
Returns
true 处理成功

◆ handle() [2/4]

bool ngl::actor_example_match::handle ( const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_JOIN > > & adata)

处理加入匹配请求

Parameters
adata消息数据
Returns
true 处理成功

◆ handle() [3/4]

bool ngl::actor_example_match::handle ( const message< mforward< pbexample::PROBUFF_EXAMPLE_PLAY_PLAYER_CONFIRM > > & adata)

处理玩家确认准备/拒绝请求

Parameters
adata消息数据
Returns
true 处理成功

◆ handle() [4/4]

bool ngl::actor_example_match::handle ( const message< np_login_request_info > & adata)

处理登录时查询匹配状态

Parameters
adata消息数据
Returns
true 处理成功

◆ init()

void ngl::actor_example_match::init ( )
virtual

初始化,设置定时器并加载玩家简要数据

Reimplemented from ngl::actor_base.

◆ loaddb_finish()

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

数据库加载完成回调

Parameters
atype数据库类型
astat加载状态

Reimplemented from ngl::actor_base.

◆ matching_finish()

void ngl::actor_example_match::matching_finish ( room * aroom)

匹配完成,通知管理器创建玩法 Actor

Parameters
aroom房间指针

◆ matching_room()

room * ngl::actor_example_match::matching_room ( i64_actorid aroleid,
pbexample::EPLAY_TYPE atype )

为玩家寻找或创建匹配房间

Parameters
aroleid玩家 ID
atype玩法类型
Returns
房间指针,找不到或创建失败返回 nullptr

◆ room_count_ready()

bool ngl::actor_example_match::room_count_ready ( room * aroom)

检查房间是否已满员

Parameters
aroom房间指针
Returns
true 房间已满,false 未满

◆ send_error()

void ngl::actor_example_match::send_error ( pbexample::PLAY_MATCHING_EERROR_CODE acode,
std::set< i64_actorid > * aplayer = nullptr,
int32_t aroomid = 0,
i64_actorid aroleid = nguid::make() )
static

发送匹配错误码给玩家

Parameters
acode错误码枚举
aplayer玩家集合指针,非空时广播给集合中所有玩家
aroomid房间 ID
aroleid单个玩家 ID,aplayer 为空时使用

◆ sync_match_info()

void ngl::actor_example_match::sync_match_info ( room * aroom,
i64_actorid aroleid = nguid::make() )

同步房间匹配信息给玩家

Parameters
aroom房间指针
aroleid指定玩家 ID,为无效 ID 时广播给房间所有玩家

◆ timer_handle()

bool ngl::actor_example_match::timer_handle ( const message< np_timerparm > & adata)

定时器回调,处理房间超时逻辑

Parameters
adata定时器消息数据
Returns
true 处理成功

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