diff --git a/talk/owt/sdk/conference/conferencesocketsignalingchannel.cc b/talk/owt/sdk/conference/conferencesocketsignalingchannel.cc index ee1c78c8a..4945fc3dc 100644 --- a/talk/owt/sdk/conference/conferencesocketsignalingchannel.cc +++ b/talk/owt/sdk/conference/conferencesocketsignalingchannel.cc @@ -5,6 +5,7 @@ #include #include #include +#include #if defined(WEBRTC_IOS) #include #endif @@ -25,7 +26,6 @@ const std::string kEventNameCustomMessage = "customMessage"; const std::string kEventNameSignalingMessagePrelude = "signaling"; const std::string kEventNameSignalingMessage = "soac"; //only for soac message const std::string kEventNameOnSignalingMessage = "progress"; -const std::string kEventNameOnCustomMessage = "text"; const std::string kEventNameSubscribe = "subscribe"; const std::string kEventNameUnsubscribe = "unsubscribe"; const std::string kEventNamePublish = "publish"; @@ -71,7 +71,8 @@ ConferenceSocketSignalingChannel::ConferenceSocketSignalingChannel() participant_id_(""), reconnection_attempted_(0), is_reconnection_(false), - outgoing_message_id_(1) {} + outgoing_message_id_(1), + message_sequence_(0) {} ConferenceSocketSignalingChannel::~ConferenceSocketSignalingChannel() { delete socket_client_; } @@ -272,8 +273,19 @@ void ConferenceSocketSignalingChannel::Connect( // The second element is room info, please refer to server's // portal implementation for detailed message format. sio::message::ptr message = msg.at(1); - if (message->get_flag() == sio::message::flag_string) { - OnReconnectionTicket(message->get_string()); + if (message->get_flag() == sio::message::flag_object) { + OnReconnectionTicket(message->get_map()["ticket"]->get_string()); + std::vector notifications = + message->get_map()["messages"]->get_vector(); + for (sio::message::ptr notification : notifications) { + int seq=notification->get_map()["seq"]->get_int(); + if(seq<=message_sequence_){ + continue; + } + sio::message::ptr notification_data=notification->get_map()["data"]; + std::string event_name=notification->get_map()["event"]->get_string(); + OnNotificationFromServer(event_name, notification_data); + } } RTC_LOG(LS_VERBOSE) << "Reconnection success"; DrainQueuedMessages(); @@ -431,6 +443,11 @@ void ConferenceSocketSignalingChannel::OnNotificationFromServer( (*it)->OnServerDisconnected(); } } + if (message_sequence_ < INT_MAX) { + message_sequence_++; + } else { + message_sequence_ = 0; + } } void ConferenceSocketSignalingChannel::SendSubscriptionUpdateMessage( diff --git a/talk/owt/sdk/conference/conferencesocketsignalingchannel.h b/talk/owt/sdk/conference/conferencesocketsignalingchannel.h index beb343e85..83d4e7981 100644 --- a/talk/owt/sdk/conference/conferencesocketsignalingchannel.h +++ b/talk/owt/sdk/conference/conferencesocketsignalingchannel.h @@ -139,6 +139,7 @@ class ConferenceSocketSignalingChannel std::queue outgoing_messages_; int outgoing_message_id_; std::mutex outgoing_message_mutex_; + int message_sequence_; std::string quic_transport_id_; }; }