void IOHandler::HandleIOMessageEvent(const EventMessage& message) { MI_LOG_TRACE(logger, "HandleIOMessageEvent"); IODescriptor* descriptor = IODescriptorFactory::GetIODescriptor(message.descriptor_id); if (!descriptor) { MI_LOG_DEBUG(logger, "HandleIOCloseEvent descriptor not found:" << message.descriptor_id); HandleIOMessageFailure(message); return; } Channel* channel = dynamic_cast<Channel*>(descriptor); if (!channel) { MI_LOG_ERROR(logger, "IOHandler::HandleIOMessageEvent descriptor is not channel"); HandleIOMessageFailure(message); return; } ProtocolMessage* protocol_message = message.GetProtocolMessage(); if (0 != channel->EncodeMessage(protocol_message)) { HandleIOMessageFailure(message); return; } descriptor->OnWrite(); }
void IOHandler::HandleIOMessageFailure(const EventMessage& message) { ProtocolMessage* protocol_message = message.GetProtocolMessage(); if (protocol_message->direction == ProtocolMessage::kOutgoingRequest) { protocol_message->status = ProtocolMessage::kInternalFailure; if (!GetIOService()->GetServiceStage()->Send(protocol_message)) { MI_LOG_WARN(logger, "IOHandler::HandleIOMessageFailure send fail"); } } else { message.Destroy(); } }