void transport_client::on_credit_udp_recved(creditudp_transport_ptr const & cudp,
		int ipccmsg_class,
		int ipccmsg_type,
		char msg_buf[],
		int buf_len,
		unsigned long src_ip,
		unsigned short src_port)
	{
		if (message_callback_)
		{
			message_callback_(shared_from_this(), ipccmsg_class, ipccmsg_type,
				msg_buf, buf_len, src_ip, src_port);
		}
	}
Beispiel #2
0
VOID WINAPI CompletedReadRoutine(
  DWORD err, DWORD readed, LPOVERLAPPED overlap) {
  auto context = (Connection::IoCompletionRoutine*)overlap;
  auto self = context->self;

  if (err == ERROR_OPERATION_ABORTED) {
    SetEvent(self->cancel_io_event_.get());
    return;
  }
  bool io = false;
  if ((err == 0) && (readed != 0)) {
    auto message = std::string(self->read_buf_, readed);
    io = self->AsyncRead(CompletedReadRoutine);
    if (!message.empty()) {
      self->message_callback_(self->shared_from_this(), message);
    }
  }

  if (!io) {
    self->Shutdown();
  }
}