void DefaultSignalingClient::SendDataMessage()

in chime-sdk-signaling-cpp/src/signaling/default_signaling_client.cc [77:112]


void DefaultSignalingClient::SendDataMessage(const DataMessageToSend& data_message_to_send) {
  if (state_ != SignalingState::kConnected) {
    return;
  }

  std::vector<DataMessageSendError> data_message_send_errors;

  if (data_message_to_send.data.size() > kMaxSize) {
    data_message_send_errors.push_back(
        BuildDataMessageError(data_message_to_send, DataMessageSendErrorReason::kInvalidDataMessageSize));
  } else if (!std::regex_match(data_message_to_send.topic, kTopicRegex)) {
    data_message_send_errors.push_back(
        BuildDataMessageError(data_message_to_send, DataMessageSendErrorReason::kInvalidTopic));
  } else if (data_message_to_send.lifetime_ms < 0) {
    data_message_send_errors.push_back(
        BuildDataMessageError(data_message_to_send, DataMessageSendErrorReason::kInvalidLifeTimeMs));
  }

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

  signal_sdk::SdkSignalFrame signal_frame;
  signal_frame.set_type(signal_sdk::SdkSignalFrame_Type_DATA_MESSAGE);
  signal_sdk::SdkDataMessageFrame* data_message_frame = signal_frame.mutable_data_message();
  signal_sdk::SdkDataMessagePayload message_payload = signal_sdk::SdkDataMessagePayload();
  message_payload.set_topic(data_message_to_send.topic);
  message_payload.set_data(data_message_to_send.data);
  message_payload.set_lifetime_ms(data_message_to_send.lifetime_ms);
  *data_message_frame->add_messages() = message_payload;

  signaling_transport_->SendSignalFrame(signal_frame);
}