acl/app/wizard/tmpl/master/master_aio.cpp

167 lines
4.0 KiB
C++
Raw Normal View History

#include "stdafx.h"
2014-11-19 00:25:21 +08:00
#include "master_service.h"
2015-09-16 21:03:02 +08:00
//////////////////////////////////////////////////////////////////////////////
// 配置内容项
2014-11-19 00:25:21 +08:00
char *var_cfg_str;
acl::master_str_tbl var_conf_str_tab[] = {
{ "str", "test_msg", &var_cfg_str },
{ 0, 0, 0 }
};
int var_cfg_bool;
acl::master_bool_tbl var_conf_bool_tab[] = {
{ "bool", 1, &var_cfg_bool },
{ 0, 0, 0 }
};
int var_cfg_int;
acl::master_int_tbl var_conf_int_tab[] = {
{ "int", 120, &var_cfg_int, 0, 0 },
{ 0, 0 , 0 , 0, 0 }
};
long long int var_cfg_int64;
acl::master_int64_tbl var_conf_int64_tab[] = {
{ "int64", 120, &var_cfg_int64, 0, 0 },
{ 0, 0 , 0 , 0, 0 }
};
2015-09-16 21:03:02 +08:00
//////////////////////////////////////////////////////////////////////////////
2014-11-19 00:25:21 +08:00
// acl::aio_callback 虚类的子类定义
2014-11-19 00:25:21 +08:00
class io_callback : public acl::aio_callback
{
public:
2019-07-20 16:41:23 +08:00
io_callback(acl::aio_socket_stream* client) : client_(client) {}
2014-11-19 00:25:21 +08:00
2019-07-20 16:41:23 +08:00
~io_callback(void) {}
2014-11-19 00:25:21 +08:00
protected:
/**
2019-07-20 16:41:23 +08:00
* @override
*
* @param data {char*}
* @param len {int}
* @return {bool} true
2014-11-19 00:25:21 +08:00
*/
2019-07-20 16:41:23 +08:00
bool read_callback(char* data, int len)
2014-11-19 00:25:21 +08:00
{
2019-07-20 16:41:23 +08:00
if (strncmp(data, "quit", 4) == 0) {
// 可以显式调用异步流的关闭过程,也可以直接返回 false
// 通知异步框架自动关闭该异步流
2014-11-19 00:25:21 +08:00
// client_->close();
return false;
}
client_->write(data, len);
return true;
}
/**
2019-07-20 16:41:23 +08:00
* @override
*
* @return {bool} true
2014-11-19 00:25:21 +08:00
*/
2019-07-20 16:41:23 +08:00
bool write_callback(void)
2014-11-19 00:25:21 +08:00
{
return true;
}
/**
2019-07-20 16:41:23 +08:00
* @override
*
2014-11-19 00:25:21 +08:00
*/
2019-07-20 16:41:23 +08:00
void close_callback(void)
2014-11-19 00:25:21 +08:00
{
// 必须在此处删除该动态分配的回调类对象以防止内存泄露
2014-11-19 00:25:21 +08:00
delete this;
}
/**
2019-07-20 16:41:23 +08:00
* @override
*
* @return {bool} true
2014-11-19 00:25:21 +08:00
*/
2019-07-20 16:41:23 +08:00
bool timeout_callback(void)
2014-11-19 00:25:21 +08:00
{
// 返回 false 通知异步框架关闭该异步流
2014-11-19 00:25:21 +08:00
return false;
}
private:
acl::aio_socket_stream* client_;
};
2015-09-16 21:03:02 +08:00
//////////////////////////////////////////////////////////////////////////////
2014-11-19 00:25:21 +08:00
2019-07-20 16:41:23 +08:00
master_service::master_service(void)
2014-11-19 00:25:21 +08:00
{
}
2019-07-20 16:41:23 +08:00
master_service::~master_service(void)
2014-11-19 00:25:21 +08:00
{
}
bool master_service::on_accept(acl::aio_socket_stream* client)
{
logger("connect from %s, fd %d", client->get_peer(true),
client->sock_handle());
// 创建异步客户端流的回调对象并与该异步流进行绑定
2014-11-19 00:25:21 +08:00
io_callback* callback = new io_callback(client);
// 注册异步流的读回调过程
2014-11-19 00:25:21 +08:00
client->add_read_callback(callback);
// 注册异步流的写回调过程
2014-11-19 00:25:21 +08:00
client->add_write_callback(callback);
// 注册异步流的关闭回调过程
2014-11-19 00:25:21 +08:00
client->add_close_callback(callback);
// 注册异步流的超时回调过程
2014-11-19 00:25:21 +08:00
client->add_timeout_callback(callback);
// 写欢迎信息
2014-11-19 00:25:21 +08:00
// client->format("hello, you're welcome\r\n");
// 从异步流读一行数据,当读到完整一行数据时回调 acl::aio_callback
// 中的 read_callback 虚函数
2014-11-19 00:25:21 +08:00
client->gets(10, false);
// 从异步流中读取不定长数据,当读到数据后回调 acl::aio_callback
// 中的 read_callback 虚函数
2014-11-19 00:25:21 +08:00
// client->read();
// 监控异步流的读状态,当有数据可读时,回调 acl::aio_callback
// 中的 read_wakeup 虚函数
2014-11-19 00:25:21 +08:00
// client->read_wait();
return true;
}
void master_service::proc_on_listen(acl::server_socket& ss)
{
logger(">>>listen %s ok<<<", ss.get_addr());
}
2019-07-20 16:41:23 +08:00
void master_service::proc_on_init(void)
2014-11-19 00:25:21 +08:00
{
logger(">>>proc_on_init<<<");
2014-11-19 00:25:21 +08:00
}
2019-07-20 16:41:23 +08:00
void master_service::proc_on_exit(void)
2014-11-19 00:25:21 +08:00
{
logger(">>>proc_on_exit<<<");
}
bool master_service::proc_on_sighup(acl::string&)
{
logger(">>>proc_on_sighup<<<");
return true;
2014-11-19 00:25:21 +08:00
}