mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-14 08:50:53 +08:00
97 lines
1.6 KiB
C++
97 lines
1.6 KiB
C++
|
#include "stdafx.h"
|
|||
|
#include "req_callback.h"
|
|||
|
#include "res_callback.h"
|
|||
|
|
|||
|
res_callback::res_callback(req_callback* req, acl::ofstream& res_fp)
|
|||
|
: conn_(NULL)
|
|||
|
, req_(req)
|
|||
|
, res_fp_(res_fp)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
res_callback::~res_callback()
|
|||
|
{
|
|||
|
acl_assert(req_ == NULL);
|
|||
|
}
|
|||
|
|
|||
|
bool res_callback::read_callback(char* data, int len)
|
|||
|
{
|
|||
|
if (req_ == NULL)
|
|||
|
{
|
|||
|
logger_warn("client peer disconnected!");
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
// ȡ<>ÿͻ<C3BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
|||
|
acl::aio_socket_stream& peer = req_->get_conn();
|
|||
|
peer.write(data, len);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱд<CAB1>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
res_fp_.write(data, len);
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
void res_callback::close_callback()
|
|||
|
{
|
|||
|
if (req_)
|
|||
|
{
|
|||
|
req_callback* req = req_;
|
|||
|
req_ = NULL;
|
|||
|
req->disconnect();
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ˴<DAB4>ɾ<EFBFBD><C9BE><EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD>ֹ<EFBFBD>ڴ<EFBFBD>й¶
|
|||
|
delete this;
|
|||
|
}
|
|||
|
|
|||
|
bool res_callback::open_callback()
|
|||
|
{
|
|||
|
// <20><><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F>д<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
conn_->add_read_callback(this);
|
|||
|
conn_->add_write_callback(this);
|
|||
|
|
|||
|
// <20>ȴ<EFBFBD><C8B4>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
conn_->read();
|
|||
|
|
|||
|
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
acl_assert(req_);
|
|||
|
req_->on_connected();
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
bool res_callback::start(acl::aio_handle& handle, const char* server_addr)
|
|||
|
{
|
|||
|
conn_ = acl::aio_socket_stream::open(&handle, server_addr, 0);
|
|||
|
if (conn_ == NULL)
|
|||
|
{
|
|||
|
logger_error("connect server %s error %s",
|
|||
|
server_addr, acl::last_serror());
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
conn_->add_open_callback(this);
|
|||
|
conn_->add_timeout_callback(this);
|
|||
|
conn_->add_close_callback(this);
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
acl::aio_socket_stream& res_callback::get_conn()
|
|||
|
{
|
|||
|
acl_assert(conn_);
|
|||
|
return *conn_;
|
|||
|
}
|
|||
|
|
|||
|
void res_callback::disconnect()
|
|||
|
{
|
|||
|
if (conn_)
|
|||
|
{
|
|||
|
req_ = NULL;
|
|||
|
conn_->close();
|
|||
|
}
|
|||
|
else
|
|||
|
delete this;
|
|||
|
}
|