[feat] put ice agent into ice worker thread and use message queue to handle events

This commit is contained in:
dijunkun
2024-08-28 17:31:27 +08:00
parent d8297ebb74
commit 1e5bea2b1e
3 changed files with 27 additions and 9 deletions

View File

@@ -438,13 +438,28 @@ int Render::Run() {
// Main loop // Main loop
while (!exit_) { while (!exit_) {
if (SignalStatus::SignalConnected == signal_status_ && if (SignalStatus::SignalConnected == signal_status_ &&
!is_create_connection_ && password_inited_) { !is_create_connection_ && password_inited_ &&
"Failed" != connection_status_str_) {
LOG_INFO("Connected with signal server, create p2p connection"); LOG_INFO("Connected with signal server, create p2p connection");
is_create_connection_ = is_create_connection_ =
CreateConnection(peer_, client_id_, password_saved_.c_str()) ? false CreateConnection(peer_, client_id_, password_saved_.c_str()) ? false
: true; : true;
} }
if (!is_create_connection_ && rejoin_ &&
"Failed" == connection_status_str_) {
LeaveConnection(peer_, client_id_);
DestroyPeer(&peer_);
peer_ = CreatePeer(&params_);
if (peer_) {
LOG_INFO("[{}] Create peer instance successful", client_id_);
Init(peer_, client_id_);
LOG_INFO("[{}] Peer init finish", client_id_);
} else {
LOG_INFO("Create peer instance failed");
}
}
if (!inited_ || if (!inited_ ||
localization_language_index_last_ != localization_language_index_) { localization_language_index_last_ != localization_language_index_) {
connect_button_label_ = connect_button_label_ =
@@ -541,8 +556,8 @@ int Render::Run() {
LeaveConnection(peer_reserved_ ? peer_reserved_ : peer_, LeaveConnection(peer_reserved_ ? peer_reserved_ : peer_,
remote_id_.c_str()); remote_id_.c_str());
if (peer_reserved_) { if (peer_reserved_) {
DestroyPeer(&peer_reserved_);
LOG_INFO("Destroy peer[reserved]"); LOG_INFO("Destroy peer[reserved]");
DestroyPeer(&peer_reserved_);
} }
rejoin_ = false; rejoin_ = false;
@@ -667,17 +682,16 @@ int Render::Run() {
device_controller_factory_ = nullptr; device_controller_factory_ = nullptr;
} }
if (is_create_connection_) { if (peer_) {
LOG_INFO("[{}] Leave connection [{}]", client_id_, client_id_); LOG_INFO("[{}] Leave connection [{}]", client_id_, client_id_);
LeaveConnection(peer_, client_id_); LeaveConnection(peer_, client_id_);
is_client_mode_ = false; is_client_mode_ = false;
} LOG_INFO("Destroy peer");
if (peer_) {
DestroyPeer(&peer_); DestroyPeer(&peer_);
} }
if (peer_reserved_) { if (peer_reserved_) {
LOG_INFO("Destroy peer[reserved]");
DestroyPeer(&peer_reserved_); DestroyPeer(&peer_reserved_);
} }

View File

@@ -198,7 +198,9 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
} else if (ConnectionStatus::Failed == status) { } else if (ConnectionStatus::Failed == status) {
render->connection_status_str_ = "Failed"; render->connection_status_str_ = "Failed";
render->password_validating_time_ = 0; render->password_validating_time_ = 0;
LOG_ERROR("rtc connection failed"); render->is_create_connection_ = false;
render->params_.enable_turn = true;
render->rejoin_ = true;
} else if (ConnectionStatus::Closed == status) { } else if (ConnectionStatus::Closed == status) {
render->connection_status_str_ = "Closed"; render->connection_status_str_ = "Closed";
render->password_validating_time_ = 0; render->password_validating_time_ = 0;
@@ -212,7 +214,9 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
render->audio_capture_button_pressed_ = false; render->audio_capture_button_pressed_ = false;
} }
render->exit_video_window_ = false; render->exit_video_window_ = false;
render->remote_password_.clear(); if (!render->rejoin_) {
render->remote_password_.clear();
}
if (render->dst_buffer_) { if (render->dst_buffer_) {
memset(render->dst_buffer_, 0, 1280 * 720 * 3); memset(render->dst_buffer_, 0, 1280 * 720 * 3);
SDL_UpdateTexture(render->stream_texture_, NULL, render->dst_buffer_, SDL_UpdateTexture(render->stream_texture_, NULL, render->dst_buffer_,