Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
void IOHandler::HandleIOActiveCloseEvent(const EventMessage& message) {
  MI_LOG_TRACE(logger, "HandleIOActiveCloseEvent");
  IODescriptor* descriptor = 
      IODescriptorFactory::GetIODescriptor(message.descriptor_id);
  if (!descriptor) {
    MI_LOG_DEBUG(logger, "HandleIOActiveCloseEvent descriptor not found:"
        << message.descriptor_id);
    return;
  }

  descriptor->OnActiveClose();
}
Exemplo n.º 3
0
void IOHandler::HandleIOWriteEvent(const EventMessage& message) {
  IODescriptor* descriptor = 
      IODescriptorFactory::GetIODescriptor(message.descriptor_id);
  if (!descriptor) {
    MI_LOG_DEBUG(logger, "HandleWriteEvent descriptor not found:"
        << message.descriptor_id);
    return;
  }

  MI_LOG_TRACE(logger, "HandleIOWriteEvent:" << *descriptor);

  descriptor->OnWrite();
}
Exemplo n.º 4
0
int SyncClientChannel::EncodeMessage(ProtocolMessage* message) {
  if (GetStatus() != kConnected) { 
    MI_LOG_DEBUG(logger, "SyncClientChannel::EncodeMessage ChannelBroken:" << GetStatus());
    return -1;
  }

  if (0 != sequence_keeper_.Register(message)) {
    MI_LOG_WARN(logger, "SyncClientChannel::EncodeMessage Register fail");
    return -1;
  }

  TryFireMessage();
  return 0; 
}
Exemplo n.º 5
0
void SyncClientChannel::OnTimeout() {
  SyncSequenceKeeper::QueueType timeout_queue = sequence_keeper_.Timeout();
  if (timeout_queue.size()) {
    LOG_DEBUG(logger, "SyncClientChannel::Break, info:" << GetDiagnositicInfo());
    BreakChannel();
  }

  ProtocolMessage* message = timeout_queue.front();
  while (message) {
    timeout_queue.pop_front();

    MI_LOG_DEBUG(logger, "SyncClientChannel::OnTimeout, message:");
    DoSendBack(message, ProtocolMessage::kStatusTimeout);

    message = timeout_queue.front(); 
  }

  StartTimeoutTimer();
}