acl/lib_acl_cpp/include/acl_cpp/master/master_threads.hpp

230 lines
7.7 KiB
C++
Raw Normal View History

#pragma once
2017-06-02 14:47:24 +08:00
#include "master_base.hpp"
#include "../stdlib/thread_mutex.hpp"
2014-11-19 00:25:21 +08:00
#ifndef ACL_CLIENT_ONLY
2014-11-19 00:25:21 +08:00
struct ACL_VSTREAM;
struct ACL_EVENT;
struct ACL_VSTRING;
struct acl_pthread_pool_t;
2014-11-19 00:25:21 +08:00
namespace acl {
class socket_stream;
/**
* 线
*
2014-11-19 00:25:21 +08:00
*/
class ACL_CPP_API master_threads : public master_base
{
public:
/**
* acl_master
*
* @param argc {int} main
* @param argv {char**} main
2014-11-19 00:25:21 +08:00
*/
void run_daemon(int argc, char** argv);
/**
*
* @param addrs {const char*} IP:PORT, IP:PORT...
* @param path {const char*}
* @param count {unsigned int}
* 0
* @param threads_count {int} 1 线
* count != 1 count == 1
* 线
* @return {bool}
* count, threads_count 使
* ioctl_use_limit() ioctl_max_threads(
* 线)
2014-11-19 00:25:21 +08:00
*/
bool run_alone(const char* addrs, const char* path = NULL,
unsigned int count = 1, int threads_count = 1);
2016-03-01 20:20:52 +08:00
/**
*
2016-03-01 20:20:52 +08:00
* @param stream {socket_stream*}
*/
void thread_enable_read(socket_stream* stream);
/**
*
2016-03-01 20:20:52 +08:00
* @param stream {socket_stream*}
*/
void thread_disable_read(socket_stream* stream);
2014-11-19 00:25:21 +08:00
2017-07-22 21:32:21 +08:00
/**
*
* @return {const char*} NULL
2017-07-22 21:32:21 +08:00
*/
const char* get_conf_path(void) const;
/**
* 线 API 便
*
* @return {size_t}
*/
size_t task_qlen(void) const;
public:
/**
* lib_acl C 线
* @return {acl_pthread_pool_t*}
*/
acl_pthread_pool_t* threads_pool(void) const;
2014-11-19 00:25:21 +08:00
protected:
// 该类不能直接被实例化
2014-11-19 00:25:21 +08:00
master_threads();
virtual ~master_threads();
/**
*
2014-11-19 00:25:21 +08:00
* @param stream {socket_stream*}
* @return {bool} false
* false
2014-11-19 00:25:21 +08:00
*/
virtual bool thread_on_read(socket_stream* stream) = 0;
/**
* thread_on_read true
*
2016-03-01 20:20:52 +08:00
* @param stream {socket_stream*}
* @return {bool} false
2016-03-01 20:20:52 +08:00
*/
virtual bool keep_read(socket_stream* stream)
{
(void) stream;
return true;
}
/**
* 线线
* 线线
2014-11-19 00:25:21 +08:00
* @param stream {socket_stream*}
* @return {bool} false
* thread_main
2014-11-19 00:25:21 +08:00
*/
virtual bool thread_on_accept(socket_stream* stream)
{
(void) stream;
return true;
}
2016-03-01 20:20:52 +08:00
/**
*
* thread_on_accept
* @return {bool} false
* thread_main
2016-03-01 20:20:52 +08:00
*/
virtual bool thread_on_handshake(socket_stream *stream)
{
(void) stream;
return true;
}
2014-11-19 00:25:21 +08:00
/**
* IO true
*
2014-11-19 00:25:21 +08:00
* @param stream {socket_stream*}
* @return {bool} false
*
2014-11-19 00:25:21 +08:00
*/
virtual bool thread_on_timeout(socket_stream* stream)
{
(void) stream;
return false;
}
/**
* 线
2014-11-19 00:25:21 +08:00
* @param stream {socket_stream*}
* thread_on_accept false
*
2014-11-19 00:25:21 +08:00
*/
virtual void thread_on_close(socket_stream* stream) { (void) stream; }
/**
* 线线
2014-11-19 00:25:21 +08:00
*/
virtual void thread_on_init() {}
/**
* 线线退
2014-11-19 00:25:21 +08:00
*/
virtual void thread_on_exit() {}
2016-03-01 20:20:52 +08:00
/**
* 退退
* 1) true 退
* 2) 退
* 3) (ioctl_quick_abort) 0
* 退
* 4) 退
* @param ncleints {size_t}
* @param nthreads {size_t} 线线
* @return {bool} false 退
* 退
2016-03-01 20:20:52 +08:00
*/
virtual bool proc_exit_timer(size_t nclients, size_t nthreads)
{
(void) nclients;
(void) nthreads;
return true;
}
2014-11-19 00:25:21 +08:00
private:
thread_mutex lock_;
void push_back(server_socket* ss);
void run(int argc, char** argv);
2014-11-19 00:25:21 +08:00
// 当接收到一个客户端连接时回调此函数
static int service_main(void*, ACL_VSTREAM*);
2014-11-19 00:25:21 +08:00
// 当监听一个服务地址时回调此函数
static void service_on_listen(void*, ACL_VSTREAM*);
// 当接收到一个客户连接时的回调函数,可以进行一些初始化
static int service_on_accept(void*, ACL_VSTREAM*);
2014-11-19 00:25:21 +08:00
// 当接收到客户端连接后服务端需要与客户端做一些事先的握手动作时
// 回调此函数,该函数会在 service_on_accept 之后被调用
static int service_on_handshake(void*, ACL_VSTREAM*);
2016-03-01 20:20:52 +08:00
// 当客户端连接读写超时时的回调函数
static int service_on_timeout(void*, ACL_VSTREAM*);
2014-11-19 00:25:21 +08:00
// 当客户端连接关闭时的回调函数
static void service_on_close(void*, ACL_VSTREAM*);
2014-11-19 00:25:21 +08:00
// 当进程切换用户身份后调用的回调函数
2014-11-19 00:25:21 +08:00
static void service_pre_jail(void*);
// 当进程切换用户身份后调用的回调函数
2014-11-19 00:25:21 +08:00
static void service_init(void*);
// 当进程需要退出时调用此函数,由应用来确定进程是否需要退出
static int service_exit_timer(void*, size_t, size_t);
2016-03-01 20:20:52 +08:00
// 当进程退出时调用的回调函数
2014-11-19 00:25:21 +08:00
static void service_exit(void*);
// 当线程创建后调用的回调函数
2016-03-01 20:20:52 +08:00
static int thread_init(void*);
2014-11-19 00:25:21 +08:00
// 当线程退出前调用的回调函数
2014-11-19 00:25:21 +08:00
static void thread_exit(void*);
// 当进程收到 SIGHUP 信号后会回调本函数
static int service_on_sighup(void*, ACL_VSTRING*);
2014-11-19 00:25:21 +08:00
};
} // namespace acl
#endif // ACL_CLIENT_ONLY