mirror of
https://github.com/kunkundi/crossdesk-server.git
synced 2026-05-17 11:41:20 +08:00
[feat] support libdatachannel ICE interaction
This commit is contained in:
@@ -168,6 +168,63 @@ bool SignalNegotiation::query_user_id_list(websocketpp::connection_hdl hdl,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SignalNegotiation::join_transmission(websocketpp::connection_hdl hdl,
|
||||
const json& j) {
|
||||
std::string transmission_id_pwd = j["transmission_id"].get<std::string>();
|
||||
std::string transmission_id;
|
||||
std::string password;
|
||||
|
||||
if (transmission_id_pwd.find("@") != std::string::npos) {
|
||||
transmission_id =
|
||||
transmission_id_pwd.substr(0, transmission_id_pwd.find("@"));
|
||||
password = transmission_id_pwd.substr(transmission_id_pwd.find("@") + 1);
|
||||
} else {
|
||||
transmission_id = transmission_id_pwd;
|
||||
password = "";
|
||||
}
|
||||
|
||||
std::string user_id = j["user_id"].get<std::string>();
|
||||
LOG_INFO("[{}] joins transmission [{}]", user_id.c_str(),
|
||||
transmission_id.c_str());
|
||||
|
||||
int ret = device_db_manager_->VerifyDevice(transmission_id, password);
|
||||
|
||||
if (0 == ret) {
|
||||
transmission_manager_->BindGuestToTransmission(user_id, transmission_id);
|
||||
|
||||
json message = {{"type", "user_join_transmission"},
|
||||
{"transmission_id", transmission_id},
|
||||
{"user_id", user_id},
|
||||
{"status", "success"}};
|
||||
|
||||
std::string host_id =
|
||||
transmission_manager_->GetHostIdOfTransmission(transmission_id);
|
||||
|
||||
if (!host_id.empty()) {
|
||||
send_msg_(transmission_manager_->GetWsHandle(host_id), message);
|
||||
}
|
||||
} else if (-1 == ret) {
|
||||
LOG_ERROR("Password incorrect for transmission id [{}]",
|
||||
transmission_id.c_str());
|
||||
json message = {{"type", "user_join_transmission"},
|
||||
{"transmission_id", transmission_id},
|
||||
{"status", "failed"},
|
||||
{"reason", "Incorrect password"}};
|
||||
|
||||
send_msg_(hdl, message);
|
||||
} else if (-2 == ret) {
|
||||
LOG_ERROR("No such transmission id [{}]", transmission_id.c_str());
|
||||
json message = {{"type", "user_join_transmission"},
|
||||
{"transmission_id", transmission_id},
|
||||
{"status", "failed"},
|
||||
{"reason", "No such transmission id"}};
|
||||
|
||||
send_msg_(hdl, message);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SignalNegotiation::offer(websocketpp::connection_hdl hdl, const json& j) {
|
||||
std::string transmission_id = j["transmission_id"].get<std::string>();
|
||||
std::string remote_user_id = j["remote_user_id"].get<std::string>();
|
||||
|
||||
@@ -28,6 +28,8 @@ class SignalNegotiation {
|
||||
bool login_user(websocketpp::connection_hdl hdl, const json& j);
|
||||
bool leave_transmission(websocketpp::connection_hdl hdl, const json& j);
|
||||
bool query_user_id_list(websocketpp::connection_hdl hdl, const json& j);
|
||||
bool join_transmission(websocketpp::connection_hdl hdl,
|
||||
const json& j);
|
||||
bool offer(websocketpp::connection_hdl hdl, const json& j);
|
||||
bool answer(websocketpp::connection_hdl hdl, const json& j);
|
||||
bool new_candidate(websocketpp::connection_hdl hdl, const json& j);
|
||||
|
||||
@@ -182,6 +182,9 @@ void SignalServer::OnMessage(websocketpp::connection_hdl hdl,
|
||||
case "query_user_id_list"_H:
|
||||
signal_negotiation_->query_user_id_list(hdl, j);
|
||||
break;
|
||||
case "join_transmission"_H:
|
||||
signal_negotiation_->join_transmission(hdl, j);
|
||||
break;
|
||||
case "offer"_H:
|
||||
signal_negotiation_->offer(hdl, j);
|
||||
break;
|
||||
|
||||
@@ -71,6 +71,16 @@ std::vector<std::string> TransmissionManager::GetAllUserIdOfTransmission(
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string TransmissionManager::GetHostIdOfTransmission(
|
||||
const std::string& transmission_id) {
|
||||
std::lock_guard<std::recursive_mutex> lock(ws_hdl_alive_checker_mutex_);
|
||||
if (transmission_host_id_list_.count(transmission_id)) {
|
||||
return transmission_host_id_list_[transmission_id];
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
bool TransmissionManager::BindHostToTransmission(
|
||||
const std::string& host_id, const std::string& transmission_id) {
|
||||
std::lock_guard<std::recursive_mutex> lock(ws_hdl_alive_checker_mutex_);
|
||||
|
||||
@@ -30,6 +30,8 @@ class TransmissionManager {
|
||||
std::vector<std::string> GetAllUserIdOfTransmission(
|
||||
const std::string& transmission_id);
|
||||
|
||||
std::string GetHostIdOfTransmission(const std::string& transmission_id);
|
||||
|
||||
bool BindHostToTransmission(const std::string& host_id,
|
||||
const std::string& transmission_id);
|
||||
bool BindGuestToTransmission(const std::string& guest_id,
|
||||
|
||||
Reference in New Issue
Block a user