paxos/src/events/send.cc

53 lines
1.2 KiB
C++
Raw Permalink Normal View History

2020-05-05 13:39:59 +00:00
#include "events/send.hh"
#include "events/receive.hh"
#include "events/register.hh"
#include "error/connection-closed.hh"
#include "error/parsing-error.hh"
#include "misc/logger.hh"
#include "misc/addrinfo/addrinfo.hh"
#include "error/connection-failed.hh"
2020-05-05 13:39:59 +00:00
namespace paxos
{
SendEW::SendEW(shared_connection connection)
: EventWatcher(connection->get_socket_fd()->fd_, EV_WRITE)
, connection_(connection)
{
}
SendEW::~SendEW()
{
}
void SendEW::operator()()
{
2020-05-05 18:50:55 +00:00
shared_socket sock = connection_->get_socket();
2020-05-05 13:39:59 +00:00
2020-05-05 18:50:55 +00:00
auto buffer = connection_->get_buffer_out();
std::string response = buffer.to_string();
2020-05-06 17:24:43 +00:00
log("Sending a message: ", blue);
2020-05-05 18:50:55 +00:00
log(response, white);
ssize_t write = 0;
try
{
write = sock->send(response.c_str(), response.size());
}
catch (const std::system_error& e)
{
std::cerr << "Connection closed while sending\n";
event_register.unregister_ew(this);
return;
}
if (write == -1)
return;
buffer.pop_front(write);
if (!buffer.empty())
return;
event_register.unregister_ew(this);
2020-05-05 13:39:59 +00:00
}
}