mirror of
https://github.com/kunkundi/crossdesk-server.git
synced 2026-03-24 07:21:38 +08:00
Use the one who creates the transmission as host
This commit is contained in:
@@ -73,9 +73,10 @@ bool SignalServer::on_close(websocketpp::connection_hdl hdl) {
|
||||
transmission_id);
|
||||
}
|
||||
|
||||
if (std::string::npos != user_id.find("H-")) {
|
||||
if (transmission_manager_.IsHostOfTransmission(user_id, transmission_id)) {
|
||||
transmission_list_.erase(transmission_id);
|
||||
transmission_manager_.ReleaseAllUserIdFromTransmission(transmission_id);
|
||||
transmission_manager_.ReleaseHostIdFromTransmission(transmission_id);
|
||||
LOG_INFO("Release transmission [{}] due to host leaves", transmission_id);
|
||||
}
|
||||
|
||||
@@ -126,9 +127,9 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
case "create_transmission"_H: {
|
||||
std::string transmission_id = j["transmission_id"].get<std::string>();
|
||||
std::string password = j["password"].get<std::string>();
|
||||
std::string user_id = j["user_id"].get<std::string>();
|
||||
LOG_INFO("Receive user id [{}] create transmission request with id [{}]",
|
||||
user_id, transmission_id);
|
||||
std::string host_id = j["user_id"].get<std::string>();
|
||||
LOG_INFO("Receive host id [{}] create transmission request with id [{}]",
|
||||
host_id, transmission_id);
|
||||
if (transmission_list_.find(transmission_id) ==
|
||||
transmission_list_.end()) {
|
||||
if (transmission_id.empty()) {
|
||||
@@ -144,9 +145,11 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
}
|
||||
transmission_list_.insert(transmission_id);
|
||||
|
||||
transmission_manager_.BindUserIdToTransmission(user_id,
|
||||
transmission_manager_.BindHostIdToTransmission(host_id,
|
||||
transmission_id);
|
||||
transmission_manager_.BindUserIdToWsHandle(user_id, hdl);
|
||||
transmission_manager_.BindUserIdToTransmission(host_id,
|
||||
transmission_id);
|
||||
transmission_manager_.BindUserIdToWsHandle(host_id, hdl);
|
||||
transmission_manager_.BindPasswordToTransmission(password,
|
||||
transmission_id);
|
||||
|
||||
@@ -184,9 +187,12 @@ void SignalServer::on_message(websocketpp::connection_hdl hdl,
|
||||
}
|
||||
|
||||
transmission_manager_.ReleaseUserIdFromTransmission(hdl);
|
||||
if (std::string::npos != user_id.find("H-")) {
|
||||
|
||||
if (transmission_manager_.IsHostOfTransmission(user_id,
|
||||
transmission_id)) {
|
||||
transmission_list_.erase(transmission_id);
|
||||
transmission_manager_.ReleaseAllUserIdFromTransmission(transmission_id);
|
||||
transmission_manager_.ReleaseHostIdFromTransmission(transmission_id);
|
||||
LOG_INFO("Release transmission [{}] due to host leaves",
|
||||
transmission_id);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,22 @@ bool TransmissionManager::BindUserIdToTransmission(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TransmissionManager::BindHostIdToTransmission(
|
||||
const std::string& host_id, const std::string& transmission_id) {
|
||||
if (transmission_host_id_list_.find(transmission_id) ==
|
||||
transmission_host_id_list_.end()) {
|
||||
transmission_host_id_list_[transmission_id] = host_id;
|
||||
LOG_INFO("Bind host id [{}] to transmission [{}]", host_id,
|
||||
transmission_id);
|
||||
return true;
|
||||
} else {
|
||||
LOG_WARN("Host id [{}] already bind to transmission [{}]", host_id,
|
||||
transmission_id);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TransmissionManager::BindPasswordToTransmission(
|
||||
const std::string& password, const std::string& transmission_id) {
|
||||
if (transmission_password_list_.find(transmission_id) ==
|
||||
@@ -71,6 +87,15 @@ bool TransmissionManager::BindUserIdToWsHandle(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TransmissionManager::IsHostOfTransmission(
|
||||
const std::string& user_id, const std::string& transmission_id) {
|
||||
if (transmission_host_id_list_.find(transmission_id) ==
|
||||
transmission_host_id_list_.end()) {
|
||||
return false;
|
||||
}
|
||||
return transmission_host_id_list_[transmission_id] == user_id;
|
||||
}
|
||||
|
||||
std::string TransmissionManager::ReleaseUserIdFromTransmission(
|
||||
websocketpp::connection_hdl hdl) {
|
||||
for (auto it = user_id_ws_hdl_list_.begin(); it != user_id_ws_hdl_list_.end();
|
||||
@@ -126,6 +151,19 @@ bool TransmissionManager::ReleasePasswordFromTransmission(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TransmissionManager::ReleaseHostIdFromTransmission(
|
||||
const std::string& transmission_id) {
|
||||
if (transmission_host_id_list_.find(transmission_id) ==
|
||||
transmission_host_id_list_.end()) {
|
||||
LOG_ERROR("No transmission with id [{}]", transmission_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
transmission_host_id_list_.erase(transmission_id);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
websocketpp::connection_hdl TransmissionManager::GetWsHandle(
|
||||
const std::string& user_id) {
|
||||
if (user_id_ws_hdl_list_.find(user_id) != user_id_ws_hdl_list_.end()) {
|
||||
|
||||
@@ -17,14 +17,20 @@ class TransmissionManager {
|
||||
public:
|
||||
bool BindUserIdToTransmission(const std::string& user_id,
|
||||
const std::string& transmission_id);
|
||||
bool BindHostIdToTransmission(const std::string& host_id,
|
||||
const std::string& transmission_id);
|
||||
bool BindPasswordToTransmission(const std::string& password,
|
||||
const std::string& transmission_id);
|
||||
bool BindUserIdToWsHandle(const std::string& user_id,
|
||||
websocketpp::connection_hdl hdl);
|
||||
|
||||
bool IsHostOfTransmission(const std::string& user_id,
|
||||
const std::string& transmission_id);
|
||||
|
||||
std::string ReleaseUserIdFromTransmission(websocketpp::connection_hdl hdl);
|
||||
bool ReleaseAllUserIdFromTransmission(const std::string& transmission_id);
|
||||
bool ReleasePasswordFromTransmission(const std::string& transmission_id);
|
||||
bool ReleaseHostIdFromTransmission(const std::string& transmission_id);
|
||||
|
||||
websocketpp::connection_hdl GetWsHandle(const std::string& user_id);
|
||||
std::string GetUserId(websocketpp::connection_hdl hdl);
|
||||
@@ -34,6 +40,7 @@ class TransmissionManager {
|
||||
|
||||
private:
|
||||
std::map<std::string, std::vector<std::string>> transmission_user_id_list_;
|
||||
std::map<std::string, std::string> transmission_host_id_list_;
|
||||
std::map<std::string, std::string> transmission_password_list_;
|
||||
std::map<std::string, websocketpp::connection_hdl> user_id_ws_hdl_list_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user