acl/lib_acl_cpp/samples/connect_manager/check_async.cpp

62 lines
1.4 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.

#include "stdafx.h"
#include "check_async.h"
check_async::check_async(acl::check_client& checker)
: checker_(checker)
{
}
check_async::~check_async(void)
{
}
bool check_async::read_callback(char* data, int len)
{
// 因为 acl 的异步 IO 读到的数据肯定会在所读到的数据最后添加 \0
// 所以直接当字符串比较在此处是安全的
if (strncasecmp(data, "+OK", 3) == 0)
{
// 发送 QUIT 命令
checker_.get_conn().format("QUIT\r\n");
// 将服务端连接置为存活状态
checker_.set_alive(true);
// 主动关闭该检测连接
checker_.close();
// 此处返回 true 或 false 都可以,因为上面已经主动要求关闭检测连接
printf(">>> NIO_CHECK SERVER(%s) OK: %s, len: %d <<<\r\n",
checker_.get_addr(), data, len);
return true;
}
// 发送 QUIT 命令
checker_.get_conn().format("QUIT\r\n");
// 将服务端置为不可用状态
checker_.set_alive(false);
printf(">>> NIO_CHECK SERVER(%s) ERROR: %s, len: %d <<<\r\n",
checker_.get_addr(), data, len);
// 返回 false 通知框架自动关闭该连接
return false;
}
bool check_async::timeout_callback()
{
// 读超时,所以直接将连接置为不可用
checker_.set_alive(false);
// 返回 false 通过框架自动关闭该检测连接
return false;
}
void check_async::close_callback()
{
// 动态创建对象,需要动态删除
delete this;
}