Added write baton to tcp sends so we follow spec

This commit is contained in:
KimLS 2016-11-05 16:18:39 -07:00
parent 53beefd19b
commit 1ada60b611

View File

@ -134,24 +134,34 @@ void EQ::Net::TCPConnection::Write(const char *data, size_t count)
return; return;
} }
struct WriteBaton
{
TCPConnection *connection;
char *buffer;
};
WriteBaton *baton = new WriteBaton;
baton->connection = this;
baton->buffer = new char[count];;
uv_write_t *write_req = new uv_write_t; uv_write_t *write_req = new uv_write_t;
memset(write_req, 0, sizeof(uv_write_t)); memset(write_req, 0, sizeof(uv_write_t));
write_req->data = this; write_req->data = baton;
uv_buf_t send_buffers[1]; uv_buf_t send_buffers[1];
char *data_out = new char[count]; memcpy(baton->buffer, data, count);
memcpy(data_out, data, count); send_buffers[0] = uv_buf_init(baton->buffer, count);
send_buffers[0] = uv_buf_init(data_out, count);
write_req->data = send_buffers[0].base;
uv_write(write_req, (uv_stream_t*)m_socket, send_buffers, 1, [](uv_write_t* req, int status) { uv_write(write_req, (uv_stream_t*)m_socket, send_buffers, 1, [](uv_write_t* req, int status) {
EQ::Net::TCPConnection *connection = (EQ::Net::TCPConnection*)req->data; WriteBaton *baton = (WriteBaton*)req->data;
delete[] (char*)req->data; delete[] baton->buffer;
delete req; delete req;
if (status < 0) { if (status < 0) {
connection->Disconnect(); baton->connection->Disconnect();
} }
delete baton;
}); });
} }