if (this->peer_acceptor_.accept (dih->get_peer(),0,0,1) ==-1) {// 获得连接
ACE_ERROR_RETURN((LM_ERROR,"Connection establish error\n"),0);
}
ACE_DEBUG((LM_INFO,"[%D][%t][%M][%N:%l]Connect to DBI succ\n"));
// 注册具体业务的事件处理器到反应堆
ACE_Reactor::instance()->register_handler(dih,ACE_Event_Handler::READ_MASK);
// 返回0 表示 反应堆需要继续处理本事件处理器DBI_Accept_Handler
return 0;
}
3.3 处理业务数据
DBI_Input_Handler设计:
class DBI_Input_Handler: public ACE_Event_Handler {
public:
DBI_Input_Handler(){}
ACE_HANDLE get_handle() const {
return peer_.get_handle();// 返回给反应堆的事件句柄
}
ACE_SOCK_Stream & get_peer() {
return peer_;
}
virtual int handle_input(ACE_HANDLE handle);
virtual int handle_close(ACE_HANDLE handle, ACE_Reactor_Mask mask) {
delete this; // 当连接结束时删除自身
}
private:
void disconnect() {
peer_.close_reader();
peer_.close_writer();
peer_.close();
}
|