mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
Support mesh connection
This commit is contained in:
@@ -97,8 +97,8 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
case "create_transmission"_H: {
|
||||
std::string transmission_id = j["transmission_id"].get<std::string>();
|
||||
std::string user_id = j["user_id"].get<std::string>();
|
||||
LOG_INFO("Receive create transmission request with id [{}]",
|
||||
transmission_id);
|
||||
LOG_INFO("Receive user id [{}] create transmission request with id [{}]",
|
||||
user_id, transmission_id);
|
||||
if (transmission_list_.find(transmission_id) ==
|
||||
transmission_list_.end()) {
|
||||
if (transmission_id.empty()) {
|
||||
@@ -114,11 +114,12 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
}
|
||||
transmission_list_.insert(transmission_id);
|
||||
|
||||
transmission_manager_.BindWsHandleToTransmission(hdl, transmission_id);
|
||||
// transmission_manager_.BindWsHandleToTransmission(hdl,
|
||||
// transmission_id);
|
||||
transmission_manager_.BindUserIdToTransmission(user_id,
|
||||
transmission_id);
|
||||
transmission_manager_.BindUserIdToWsHandle(user_id, hdl);
|
||||
transmission_manager_.BindUserNameToUserId("host", user_id);
|
||||
// transmission_manager_.BindUserNameToUserId("host", user_id);
|
||||
|
||||
// if (transmission_manager_.GetUsername(hdl).empty()) {
|
||||
// transmission_manager_.BindUsernameToWsHandle("host", hdl);
|
||||
@@ -157,19 +158,25 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
case "offer"_H: {
|
||||
std::string transmission_id = j["transmission_id"].get<std::string>();
|
||||
std::string sdp = j["sdp"].get<std::string>();
|
||||
std::string remote_peer = j["remote_peer"].get<std::string>();
|
||||
// LOG_INFO("Receive transmission id [{}] with offer sdp [{}]",
|
||||
// transmission_id, sdp);
|
||||
transmission_manager_.BindWsHandleToTransmission(hdl, transmission_id);
|
||||
std::string offer_peer = GetIceUsername(sdp);
|
||||
transmission_manager_.BindUsernameToWsHandle(offer_peer, hdl);
|
||||
std::string user_id = j["user_id"].get<std::string>();
|
||||
std::string remote_user_id = j["remote_user_id"].get<std::string>();
|
||||
|
||||
// transmission_manager_.BindWsHandleToTransmission(hdl, transmission_id);
|
||||
// std::string offer_peer = GetIceUsername(sdp);
|
||||
// transmission_manager_.BindUsernameToWsHandle(offer_peer, hdl);
|
||||
|
||||
transmission_manager_.BindUserIdToTransmission(user_id, transmission_id);
|
||||
transmission_manager_.BindUserIdToWsHandle(user_id, hdl);
|
||||
|
||||
websocketpp::connection_hdl destination_hdl =
|
||||
transmission_manager_.GetWsHandle(remote_peer);
|
||||
transmission_manager_.GetWsHandle(remote_user_id);
|
||||
|
||||
json message = {{"type", "offer"}, {"sdp", sdp}};
|
||||
json message = {{"type", "offer"},
|
||||
{"sdp", sdp},
|
||||
{"remote_user_id", user_id},
|
||||
{"transmission_id", transmission_id}};
|
||||
|
||||
LOG_INFO("[{}] send offer sdp to [{}]", offer_peer, remote_peer);
|
||||
LOG_INFO("[{}] send offer sdp to [{}]", user_id, remote_user_id);
|
||||
send_msg(destination_hdl, message);
|
||||
|
||||
break;
|
||||
@@ -177,22 +184,33 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
case "answer"_H: {
|
||||
std::string transmission_id = j["transmission_id"].get<std::string>();
|
||||
std::string sdp = j["sdp"].get<std::string>();
|
||||
std::string guest_ice_username = j["guest"].get<std::string>();
|
||||
std::string host_ice_username = GetIceUsername(sdp);
|
||||
if (transmission_manager_.GetUsername(hdl) == "host") {
|
||||
LOG_INFO("Update transmission [{}] [host] to [{}]", transmission_id,
|
||||
host_ice_username);
|
||||
transmission_manager_.UpdateUsernameToWsHandle(host_ice_username, hdl);
|
||||
}
|
||||
std::string user_id = j["user_id"].get<std::string>();
|
||||
std::string remote_user_id = j["remote_user_id"].get<std::string>();
|
||||
|
||||
websocketpp::connection_hdl guest_hdl =
|
||||
transmission_manager_.GetWsHandle(guest_ice_username);
|
||||
// transmission_manager_.BindUserIdToTransmission(user_id,
|
||||
// transmission_id); transmission_manager_.BindUserIdToWsHandle(user_id,
|
||||
// hdl);
|
||||
|
||||
websocketpp::connection_hdl destination_hdl =
|
||||
transmission_manager_.GetWsHandle(remote_user_id);
|
||||
|
||||
// if (transmission_manager_.GetUsername(hdl) == "host") {
|
||||
// LOG_INFO("Update transmission [{}] [host] to [{}]", transmission_id,
|
||||
// host_ice_username);
|
||||
// transmission_manager_.UpdateUsernameToWsHandle(host_ice_username,
|
||||
// hdl);
|
||||
// }
|
||||
|
||||
// websocketpp::connection_hdl guest_hdl =
|
||||
// transmission_manager_.GetWsHandle(guest_ice_username);
|
||||
|
||||
// LOG_INFO("send answer sdp [{}]", sdp);
|
||||
LOG_INFO("[{}] send answer sdp to [{}]", host_ice_username,
|
||||
guest_ice_username);
|
||||
json message = {{"type", "remote_sdp"}, {"sdp", sdp}};
|
||||
send_msg(guest_hdl, message);
|
||||
LOG_INFO("[{}] send answer sdp to [{}]", user_id, remote_user_id);
|
||||
json message = {{"type", "remote_sdp"},
|
||||
{"sdp", sdp},
|
||||
{"remote_user_id", user_id},
|
||||
{"transmission_id", transmission_id}};
|
||||
send_msg(destination_hdl, message);
|
||||
break;
|
||||
}
|
||||
case "offer_candidate"_H: {
|
||||
|
||||
@@ -132,13 +132,15 @@ websocketpp::connection_hdl TransmissionManager::GetGuestWsHandle(
|
||||
|
||||
std::vector<std::string> TransmissionManager::GetAllMembersOfTransmission(
|
||||
const std::string& transmission_id) {
|
||||
std::vector<std::string> member_list;
|
||||
|
||||
for (auto guest_hdl : GetAllGuestsOfTransmission(transmission_id)) {
|
||||
member_list.push_back(GetUsername(guest_hdl));
|
||||
// for (auto guest_hdl : GetAllGuestsOfTransmission(transmission_id)) {
|
||||
// member_list.push_back(GetUsername(guest_hdl));
|
||||
// }
|
||||
if (transmission_user_id_list_.find(transmission_id) !=
|
||||
transmission_user_id_list_.end()) {
|
||||
return transmission_user_id_list_[transmission_id];
|
||||
}
|
||||
|
||||
return member_list;
|
||||
return std::vector<std::string>();
|
||||
}
|
||||
|
||||
bool TransmissionManager::BindWsHandleToTransmission(
|
||||
@@ -165,6 +167,7 @@ bool TransmissionManager::BindUserIdToTransmission(
|
||||
const std::string& user_id, const std::string& transmission_id) {
|
||||
if (transmission_user_id_list_.find(transmission_id) ==
|
||||
transmission_user_id_list_.end()) {
|
||||
LOG_INFO("Add user id [{}] to transmission [{}]", user_id, transmission_id);
|
||||
transmission_user_id_list_[transmission_id].push_back(user_id);
|
||||
return true;
|
||||
} else {
|
||||
@@ -177,6 +180,7 @@ bool TransmissionManager::BindUserIdToTransmission(
|
||||
}
|
||||
}
|
||||
transmission_user_id_list_[transmission_id].push_back(user_id);
|
||||
LOG_INFO("Add user id [{}] to transmission [{}]", user_id, transmission_id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -249,10 +253,20 @@ std::string TransmissionManager::GetUsername(websocketpp::connection_hdl hdl) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// websocketpp::connection_hdl TransmissionManager::GetWsHandle(
|
||||
// const std::string& username) {
|
||||
// if (username_ws_hdl_list_.find(username) != username_ws_hdl_list_.end()) {
|
||||
// return username_ws_hdl_list_[username];
|
||||
// } else {
|
||||
// websocketpp::connection_hdl hdl;
|
||||
// return hdl;
|
||||
// }
|
||||
// }
|
||||
|
||||
websocketpp::connection_hdl TransmissionManager::GetWsHandle(
|
||||
const std::string& username) {
|
||||
if (username_ws_hdl_list_.find(username) != username_ws_hdl_list_.end()) {
|
||||
return username_ws_hdl_list_[username];
|
||||
const std::string& user_id) {
|
||||
if (user_id_ws_hdl_list_.find(user_id) != user_id_ws_hdl_list_.end()) {
|
||||
return user_id_ws_hdl_list_[user_id];
|
||||
} else {
|
||||
websocketpp::connection_hdl hdl;
|
||||
return hdl;
|
||||
|
||||
@@ -56,7 +56,8 @@ class TransmissionManager {
|
||||
bool UpdateUsernameToWsHandle(const std::string& username,
|
||||
websocketpp::connection_hdl hdl);
|
||||
std::string GetUsername(websocketpp::connection_hdl hdl);
|
||||
websocketpp::connection_hdl GetWsHandle(const std::string& username);
|
||||
// websocketpp::connection_hdl GetWsHandle(const std::string& username);
|
||||
websocketpp::connection_hdl GetWsHandle(const std::string& user_id);
|
||||
|
||||
private:
|
||||
std::map<std::string, websocketpp::connection_hdl> transmission_host_list_;
|
||||
|
||||
Reference in New Issue
Block a user