| 163 | } |
| 164 | |
| 165 | void Transporter::OnAsyncWrite(uv_async_t* handle) |
| 166 | { |
| 167 | auto* self = static_cast<Transporter*>(handle->data); |
| 168 | std::queue<WriteRequest*> pending; |
| 169 | { |
| 170 | std::lock_guard<std::mutex> lock(self->writeMtx); |
| 171 | std::swap(pending, self->writeQueue); |
| 172 | } |
| 173 | while (!pending.empty()) { |
| 174 | auto* writeReq = pending.front(); |
| 175 | pending.pop(); |
| 176 | uv_write(&writeReq->req, writeReq->handler, &writeReq->buf, 1, AfterWrite); |
| 177 | } |
| 178 | } |
| 179 | |
| 180 | void Transporter::Send(uv_stream_t* handler, int cmd, const char* data, size_t len) |
| 181 | { |