[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
while (!exit_) {
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");
is_create_connection_ =
CreateConnection(peer_, client_id_, password_saved_.c_str()) ? false
: 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_ ||
localization_language_index_last_ != localization_language_index_) {
connect_button_label_ =
@@ -541,8 +556,8 @@ int Render::Run() {
LeaveConnection(peer_reserved_ ? peer_reserved_ : peer_,
remote_id_.c_str());
if (peer_reserved_) {
DestroyPeer(&peer_reserved_);
LOG_INFO("Destroy peer[reserved]");
DestroyPeer(&peer_reserved_);
}
rejoin_ = false;
@@ -667,17 +682,16 @@ int Render::Run() {
device_controller_factory_ = nullptr;
}
if (is_create_connection_) {
if (peer_) {
LOG_INFO("[{}] Leave connection [{}]", client_id_, client_id_);
LeaveConnection(peer_, client_id_);
is_client_mode_ = false;
}
if (peer_) {
LOG_INFO("Destroy peer");
DestroyPeer(&peer_);
}
if (peer_reserved_) {
LOG_INFO("Destroy peer[reserved]");
DestroyPeer(&peer_reserved_);
}

View File

@@ -198,7 +198,9 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
} else if (ConnectionStatus::Failed == status) {
render->connection_status_str_ = "Failed";
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) {
render->connection_status_str_ = "Closed";
render->password_validating_time_ = 0;
@@ -212,7 +214,9 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
render->audio_capture_button_pressed_ = false;
}
render->exit_video_window_ = false;
if (!render->rejoin_) {
render->remote_password_.clear();
}
if (render->dst_buffer_) {
memset(render->dst_buffer_, 0, 1280 * 720 * 3);
SDL_UpdateTexture(render->stream_texture_, NULL, render->dst_buffer_,