acl/lib_acl_cpp/include/acl_cpp/master/master_base.hpp
2024-07-22 17:07:57 +08:00

141 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "../acl_cpp_define.hpp"
#include "../stdlib/noncopyable.hpp"
#include "master_conf.hpp"
#include <vector>
#ifndef ACL_CLIENT_ONLY
struct ACL_EVENT;
namespace acl {
class server_socket;
class event_timer;
class string;
ACL_CPP_API void master_log_enable(bool yes);
ACL_CPP_API bool master_log_enabled(void);
class ACL_CPP_API master_base : public noncopyable {
public:
/**
* 设置 bool 类型的配置项
* @param table {master_bool_tbl*}
* @return {master_base&}
*/
master_base& set_cfg_bool(master_bool_tbl* table);
/**
* 设置 int 类型的配置项
* @param table {master_int_tbl*}
* @return {master_base&}
*/
master_base& set_cfg_int(master_int_tbl* table);
/**
* 设置 int64 类型的配置项
* @param table {master_int64_tbl*}
* @return {master_base&}
*/
master_base& set_cfg_int64(master_int64_tbl* table);
/**
* 设置 字符串 类型的配置项
* @param table {master_str_tbl*}
* @return {master_base&}
*/
master_base& set_cfg_str(master_str_tbl* table);
/**
* 判断是否是由 acl_master 控制的 daemon 模式
* @return {bool}
*/
bool daemon_mode() const;
/////////////////////////////////////////////////////////////////////
/**
* 设置进程级别的定时器,该函数只可在主线程的运行空间 (如在函数
* proc_on_init) 中被设置,当该定时器任务都执行完毕后会自动被
* 销毁(即内部会自动调用 master_timer::destroy 方法)
* @param timer {event_timer*} 定时任务
* @return {bool} 设置定时器是否成功
*/
bool proc_set_timer(event_timer* timer);
/**
* 删除进程级别定时器
* @param timer {event_timer*} 由 proc_set_timer 设置的定时任务
*/
void proc_del_timer(event_timer* timer);
protected:
bool daemon_mode_;
bool proc_inited_;
std::vector<server_socket*> servers_;
master_base();
virtual ~master_base();
/**
* 在进程启动时,服务进程每成功监听一个本地地址,便调用本函数
* @param ss {const server_socket&} 监听对象
*/
virtual void proc_on_listen(server_socket& ss) { (void) ss; }
/**
* 当进程切换用户身份前调用的回调函数,可以在此函数中做一些
* 用户身份为 root 的权限操作
*/
virtual void proc_pre_jail() {}
/**
* 当进程切换用户身份后调用的回调函数,此函数被调用时,进程
* 的权限为普通受限级别
*/
virtual void proc_on_init() {}
/**
* 在进程退出前先调用此虚方法,如果子类实现返回 false则会休眠1秒后
* 继续调用该虚方法,直至子类实现返回 true 为止,这给应用层一个决定
* 是否立刻退出的方法
*
*/
virtual bool proc_pre_exit() { return true; }
/**
* 当进程退出前调用的回调函数,该函数返回后进程将正式退出,注意该方法
* 会在上面 proc_pre_exit 调用后调用
*/
virtual void proc_on_exit() {}
/**
* 当收到 SIGHUP 信号时的回调虚方法
*/
virtual bool proc_on_sighup(string&) { return true; }
// 配置对象
master_conf conf_;
protected:
// 子类必须调用本方法设置事件引擎句柄
void set_event(ACL_EVENT* event);
/**
* 获得事件引擎够本
* @return {ACL_EVENT*}
*/
ACL_EVENT* get_event() const {
return event_;
}
private:
ACL_EVENT* event_;
};
} // namespace acl
#endif // ACL_CLIENT_ONLY