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);
});
}
}