mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-04 12:59:39 +08:00
156 lines
3.3 KiB
C++
156 lines
3.3 KiB
C++
#include "stdafx.h"
|
||
#include "master_service.h"
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// 配置内容项
|
||
|
||
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 }
|
||
};
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
// acl::aio_callback 虚类的子类定义
|
||
class io_callback : public acl::aio_callback
|
||
{
|
||
public:
|
||
io_callback(acl::aio_socket_stream* client)
|
||
: client_(client)
|
||
{
|
||
}
|
||
|
||
~io_callback()
|
||
{
|
||
}
|
||
|
||
protected:
|
||
/**
|
||
* 实现父类中的虚函数,客户端流的读成功回调过程
|
||
* @param data {char*} 读到的数据地址
|
||
* @param len {int} 读到的数据长度
|
||
* @return {bool} 返回 true 表示继续,否则希望关闭该异步流
|
||
*/
|
||
virtual bool read_callback(char* data, int len)
|
||
{
|
||
if (strncmp(data, "quit", 4) == 0)
|
||
{
|
||
// 可以显式地调用异步流的关闭过程,也可以直接返回 false,
|
||
// 通知异步框架自动关闭该异步流
|
||
// client_->close();
|
||
return false;
|
||
}
|
||
client_->write(data, len);
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 实现父类中的虚函数,客户端流的写成功回调过程
|
||
* @return {bool} 返回 true 表示继续,否则希望关闭该异步流
|
||
*/
|
||
virtual bool write_callback()
|
||
{
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 实现父类中的虚函数,客户端流的关闭回调过程
|
||
*/
|
||
virtual void close_callback()
|
||
{
|
||
// 必须在此处删除该动态分配的回调类对象以防止内存泄露
|
||
delete this;
|
||
}
|
||
|
||
/**
|
||
* 实现父类中的虚函数,客户端流的超时回调过程
|
||
* @return {bool} 返回 true 表示继续,否则希望关闭该异步流
|
||
*/
|
||
virtual bool timeout_callback()
|
||
{
|
||
// 返回 false 通知异步框架关闭该异步流
|
||
return false;
|
||
}
|
||
|
||
private:
|
||
acl::aio_socket_stream* client_;
|
||
};
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
master_service::master_service()
|
||
{
|
||
}
|
||
|
||
master_service::~master_service()
|
||
{
|
||
}
|
||
|
||
bool master_service::on_accept(acl::aio_socket_stream* client)
|
||
{
|
||
logger("connect from %s, fd %d", client->get_peer(true),
|
||
client->sock_handle());
|
||
|
||
// 创建异步客户端流的回调对象并与该异步流进行绑定
|
||
io_callback* callback = new io_callback(client);
|
||
|
||
// 注册异步流的读回调过程
|
||
client->add_read_callback(callback);
|
||
|
||
// 注册异步流的写回调过程
|
||
client->add_write_callback(callback);
|
||
|
||
// 注册异步流的关闭回调过程
|
||
client->add_close_callback(callback);
|
||
|
||
// 注册异步流的超时回调过程
|
||
client->add_timeout_callback(callback);
|
||
|
||
// 写欢迎信息
|
||
// client->format("hello, you're welcome\r\n");
|
||
|
||
// 从异步流读一行数据,当读到完整一行数据时回调 acl::aio_callback
|
||
// 中的 read_callback 虚函数
|
||
client->gets(10, false);
|
||
|
||
// 从异步流中读取不定长数据,当读到数据后回调 acl::aio_callback
|
||
// 中的 read_callback 虚函数
|
||
// client->read();
|
||
|
||
// 监控异步流的读状态,当有数据可读时,回调 acl::aio_callback
|
||
// 中的 read_wakeup 虚函数
|
||
// client->read_wait();
|
||
return true;
|
||
}
|
||
|
||
void master_service::proc_on_init()
|
||
{
|
||
}
|
||
|
||
void master_service::proc_on_exit()
|
||
{
|
||
}
|