#pragma once

class mymonitor : public acl::connect_monitor
{
public:
	mymonitor(acl::connect_manager& manager, const acl::string& proto);
	~mymonitor(void);

protected:
	/**
	 * 基类 connect_monitor 虚函数，重载本函数用来进一步判断该连接是否是存活的
	 * @param checker {check_client&} 服务端连接的检查对象，可以通过
	 *  check_client 类中的方法如下：
	 *  1) get_conn 获得非阻塞连接句柄
	 *  2) get_addr 获得服务端地址
	 *  3) set_alive 设置连接是否存活
	 *  4) close 关闭连接
	 */
	void nio_check(acl::check_client& checker,
		acl::aio_socket_stream& conn);

	/**
	 * 同步 IO 检测虚函数，该函数在线程池的某个子线程空间中运行，子类可以重载本函数
	 * 以检测实际应用的网络连接存活状态，可以在本函数内有阻塞 IO 过程
	 * @param checker {check_client&} 服务端连接的检查对象
	 *  check_client 类中允许调用的方法如下：
	 *  1) get_addr 获得服务端地址
	 *  2) set_alive 设置连接是否存活
	 *  check_client 类中禁止调用的方法如下：
	 *  1) get_conn 获得非阻塞连接句柄
	 *  2) close 关闭连接
	 */
	void sio_check(acl::check_client& checker, acl::socket_stream& conn);

private:
	acl::string proto_;
};
