From a308094fbda69d4e3fc9b3b4de7c4ae938c3b4dc Mon Sep 17 00:00:00 2001 From: dijunkun Date: Thu, 8 Aug 2024 15:13:38 +0800 Subject: [PATCH] [feat] add Login() private method which uses to check/request use_id when websocket opened --- src/pc/peer_connection.cpp | 45 +++++++++++++++++++++++++++++++------- src/pc/peer_connection.h | 5 ++++- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/pc/peer_connection.cpp b/src/pc/peer_connection.cpp index b455b49..da8a770 100644 --- a/src/pc/peer_connection.cpp +++ b/src/pc/peer_connection.cpp @@ -103,18 +103,23 @@ int PeerConnection::Init(PeerConnectionParams params, on_ws_status_ = [this](WsStatus ws_status) { if (WsStatus::WsOpening == ws_status) { + ws_status_ = WsStatus::WsOpening; signal_status_ = SignalStatus::SignalConnecting; on_signal_status_(SignalStatus::SignalConnecting, user_data_); } else if (WsStatus::WsOpened == ws_status) { - signal_status_ = SignalStatus::SignalConnected; - on_signal_status_(SignalStatus::SignalConnected, user_data_); + ws_status_ = WsStatus::WsOpened; + LOG_INFO("Login to signal server"); + Login(); } else if (WsStatus::WsFailed == ws_status) { + ws_status_ = WsStatus::WsFailed; signal_status_ = SignalStatus::SignalFailed; on_signal_status_(SignalStatus::SignalFailed, user_data_); } else if (WsStatus::WsClosed == ws_status) { + ws_status_ = WsStatus::WsClosed; signal_status_ = SignalStatus::SignalClosed; on_signal_status_(SignalStatus::SignalClosed, user_data_); } else if (WsStatus::WsReconnecting == ws_status) { + ws_status_ = WsStatus::WsReconnecting; signal_status_ = SignalStatus::SignalReconnecting; on_signal_status_(SignalStatus::SignalReconnecting, user_data_); } @@ -303,6 +308,23 @@ int PeerConnection::CreateAudioCodec() { return 0; } +int PeerConnection::Login() { + if (WsStatus::WsOpened != ws_status_) { + LOG_ERROR("Websocket not opened"); + return -1; + } + + int ret = 0; + + json message = {{"type", "login"}, {"user_id", user_id_}}; + + if (ws_transport_) { + ws_transport_->Send(message.dump()); + LOG_INFO("[{}] send login request to signal server", user_id_); + } + return ret; +} + int PeerConnection::Create(const std::string &transmission_id, const std::string &password) { if (SignalStatus::SignalConnected != GetSignalStatus()) { @@ -376,18 +398,23 @@ void PeerConnection::ProcessSignal(const std::string &signal) { std::string type = j["type"]; // LOG_INFO("signal type: {}", type); switch (HASH_STRING_PIECE(type.c_str())) { - case "ws_connection_id"_H: { - ws_connection_id_ = j["ws_connection_id"].get(); - LOG_INFO("Receive local peer websocket connection id [{}]", - ws_connection_id_); + case "login"_H: { + if (j["status"].get() == "success") { + user_id_ = j["user_id"].get(); + net_status_report_(atoi(user_id_.c_str()), TraversalMode::UnknownMode, + 0, 0, user_data_); + LOG_INFO("Login success with id [{}]", user_id_); + signal_status_ = SignalStatus::SignalConnected; + on_signal_status_(SignalStatus::SignalConnected, user_data_); + } else if (j["status"].get() == "fail") { + LOG_WARN("Login failed with id [{}]", transmission_id_); + } break; } case "transmission_id"_H: { if (j["status"].get() == "success") { transmission_id_ = j["transmission_id"].get(); user_id_ = transmission_id_; - net_status_report_(atoi(transmission_id_.c_str()), - TraversalMode::UnknownMode, 0, 0, user_data_); LOG_INFO("Create transmission success with id [{}]", transmission_id_); } else if (j["status"].get() == "fail") { LOG_WARN("Create transmission failed with id [{}], due to [{}]", @@ -534,6 +561,8 @@ void PeerConnection::ProcessSignal(const std::string &signal) { on_connection_status_(ConnectionStatus::Connecting, user_data_); std::string transmission_id = j["transmission_id"].get(); std::string remote_user_id = j["remote_user_id"].get(); + LOG_INFO("[{}] receive answer from [{}]", user_id_, remote_user_id); + if (j.contains("sdp")) { std::string remote_sdp = j["sdp"].get(); if (ice_transmission_list_.find(remote_user_id) != diff --git a/src/pc/peer_connection.h b/src/pc/peer_connection.h index 9309a97..222fe3a 100644 --- a/src/pc/peer_connection.h +++ b/src/pc/peer_connection.h @@ -72,6 +72,8 @@ class PeerConnection { int SendUserData(const char *data, size_t size); private: + int Login(); + int CreateVideoCodec(bool hardware_acceleration); int CreateAudioCodec(); @@ -97,7 +99,7 @@ class PeerConnection { int turn_server_port_ = 0; bool hardware_acceleration_ = false; bool av1_encoding_ = false; - bool trickle_ice_ = true; + bool trickle_ice_ = false; TraversalMode mode_ = TraversalMode::P2P; private: @@ -108,6 +110,7 @@ class PeerConnection { std::string user_id_ = ""; std::string transmission_id_ = ""; std::vector user_id_list_; + WsStatus ws_status_ = WsStatus::WsClosed; SignalStatus signal_status_ = SignalStatus::SignalClosed; std::mutex signal_status_mutex_; std::atomic leave_{false};