Release ice instance when a user leave transmission

This commit is contained in:
dijunkun
2023-08-24 09:57:55 +08:00
parent 2e28ad61f8
commit e31405c78b
4 changed files with 44 additions and 16 deletions

View File

@@ -25,7 +25,12 @@ IceTransmission::IceTransmission(
ice_ws_transport_(ice_ws_transmission),
on_receive_ice_msg_cb_(on_receive_ice_msg) {}
IceTransmission::~IceTransmission() {}
IceTransmission::~IceTransmission() {
if (ice_agent_) {
delete ice_agent_;
ice_agent_ = nullptr;
}
}
int IceTransmission::InitIceTransmission(std::string &ip, int port) {
ice_agent_ = new IceAgent(ip, port);
@@ -75,22 +80,15 @@ int IceTransmission::InitIceTransmission(std::string &ip, int port) {
}
int IceTransmission::DestroyIceTransmission() {
if (ice_agent_) {
delete ice_agent_;
}
return 0;
LOG_INFO("[{}] Destroy ice transmission", user_id_);
return ice_agent_->DestoryIceAgent();
}
int IceTransmission::CreateTransmission(const std::string &transmission_id) {
LOG_INFO("Create transport");
LOG_INFO("[{}] Create transmission", user_id_);
offer_peer_ = false;
transmission_id_ = transmission_id;
// if (SignalStatus::Connected != signal_status_) {
// LOG_ERROR("Not connect to signalserver");
// return -1;
// }
json message = {{"type", "create_transmission"},
{"transmission_id", transmission_id}};
if (ice_ws_transport_) {
@@ -98,7 +96,6 @@ int IceTransmission::CreateTransmission(const std::string &transmission_id) {
LOG_INFO("Send msg: {}", message.dump().c_str());
}
// CreateOffer();
return 0;
}
@@ -109,7 +106,7 @@ int IceTransmission::SetTransmissionId(const std::string &transmission_id) {
}
int IceTransmission::JoinTransmission() {
LOG_INFO("Join transport");
LOG_INFO("[{}] Join transmission", user_id_);
CreateOffer();
return 0;

View File

@@ -64,6 +64,20 @@ int PeerConnection::Create(PeerConnectionParams params,
}
break;
}
case "user_leave_transmission"_H: {
std::string user_id = j["user_id"];
LOG_INFO("Receive notification: user id [{}] leave transmission",
user_id);
auto user_id_it = ice_transmission_list_.find(user_id);
if (user_id_it != ice_transmission_list_.end()) {
user_id_it->second->DestroyIceTransmission();
delete user_id_it->second;
user_id_it->second = nullptr;
ice_transmission_list_.erase(user_id_it);
LOG_INFO("Terminate transmission to user [{}]", user_id);
}
break;
}
case "offer"_H: {
std::string remote_sdp = j["sdp"].get<std::string>();
@@ -169,6 +183,20 @@ int PeerConnection::Join(PeerConnectionParams params,
break;
}
case "user_leave_transmission"_H: {
std::string user_id = j["user_id"];
LOG_INFO("Receive notification: user id [{}] leave transmission",
user_id);
auto user_id_it = ice_transmission_list_.find(user_id);
if (user_id_it != ice_transmission_list_.end()) {
user_id_it->second->DestroyIceTransmission();
delete user_id_it->second;
user_id_it->second = nullptr;
ice_transmission_list_.erase(user_id_it);
LOG_INFO("Terminate transmission to user [{}]", user_id);
}
break;
}
case "ws_connection_id"_H: {
ws_connection_id_ = j["ws_connection_id"].get<unsigned int>();
LOG_INFO("Receive local peer websocket connection id [{}]",