void DefaultSignalingClient::HandleDataMessageFrame()

in chime-sdk-signaling-cpp/src/signaling/default_signaling_client.cc [558:593]


void DefaultSignalingClient::HandleDataMessageFrame(const signal_sdk::SdkDataMessageFrame& data_message_frame) {
  if (data_message_frame.messages_size() <= 0) return;
  std::vector<DataMessageReceived> messages;
  std::vector<DataMessageSendError> error_messages;
  messages.reserve(data_message_frame.messages_size());

  for (int index = 0; index < data_message_frame.messages_size(); index++) {
    // It is throttled, we should invoke an error
    if (data_message_frame.messages(index).ingest_time_ns() == 0) {
      DataMessageSendError data_message_send_error;
      data_message_send_error.data_message.data = data_message_frame.messages(index).data();
      data_message_send_error.data_message.topic = data_message_frame.messages(index).topic();
      data_message_send_error.reason = DataMessageSendErrorReason::kThrottled;
      error_messages.push_back(data_message_send_error);
    } else {
      DataMessageReceived message = {};
      message.timestamp_ms = data_message_frame.messages(index).ingest_time_ns() / 1000000;
      message.topic = data_message_frame.messages(index).topic();
      message.data = data_message_frame.messages(index).data();
      message.attendee.attendee_id = data_message_frame.messages(index).sender_attendee_id();
      message.attendee.external_user_id = data_message_frame.messages(index).sender_external_user_id();
      messages.push_back(message);
    }
  }

  if (!messages.empty()) {
    NotifySignalingObserver(
        [&messages](SignalingClientObserver* observer) -> void { observer->OnDataMessageReceived(messages); });
  }

  if (!error_messages.empty()) {
    NotifySignalingObserver([&error_messages](SignalingClientObserver* observer) -> void {
      observer->OnDataMessagesFailedToSend(error_messages);
    });
  }
}