mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-12-20 06:29:08 +08:00
[feat] support multiple web clients connecting simultaneously
This commit is contained in:
@@ -49,10 +49,10 @@ class Render {
|
|||||||
bool connection_established_ = false;
|
bool connection_established_ = false;
|
||||||
bool rejoin_ = false;
|
bool rejoin_ = false;
|
||||||
bool net_traffic_stats_button_pressed_ = false;
|
bool net_traffic_stats_button_pressed_ = false;
|
||||||
bool mouse_control_button_pressed_ = false;
|
bool mouse_control_button_pressed_ = true;
|
||||||
bool mouse_controller_is_started_ = false;
|
bool mouse_controller_is_started_ = false;
|
||||||
bool audio_capture_button_pressed_ = true;
|
bool audio_capture_button_pressed_ = true;
|
||||||
bool control_mouse_ = false;
|
bool control_mouse_ = true;
|
||||||
bool streaming_ = false;
|
bool streaming_ = false;
|
||||||
bool is_control_bar_in_left_ = true;
|
bool is_control_bar_in_left_ = true;
|
||||||
bool control_bar_hovered_ = false;
|
bool control_bar_hovered_ = false;
|
||||||
@@ -313,7 +313,7 @@ class Render {
|
|||||||
bool screen_capturer_is_started_ = false;
|
bool screen_capturer_is_started_ = false;
|
||||||
bool start_speaker_capturer_ = false;
|
bool start_speaker_capturer_ = false;
|
||||||
bool speaker_capturer_is_started_ = false;
|
bool speaker_capturer_is_started_ = false;
|
||||||
bool start_keyboard_capturer_ = false;
|
bool start_keyboard_capturer_ = true;
|
||||||
bool keyboard_capturer_is_started_ = false;
|
bool keyboard_capturer_is_started_ = false;
|
||||||
bool foucs_on_main_window_ = false;
|
bool foucs_on_main_window_ = false;
|
||||||
bool foucs_on_stream_window_ = false;
|
bool foucs_on_stream_window_ = false;
|
||||||
@@ -472,6 +472,9 @@ class Render {
|
|||||||
client_properties_;
|
client_properties_;
|
||||||
void CloseTab(decltype(client_properties_)::iterator& it);
|
void CloseTab(decltype(client_properties_)::iterator& it);
|
||||||
/* ------ stream window property end ------ */
|
/* ------ stream window property end ------ */
|
||||||
|
|
||||||
|
/* ------ server mode ------ */
|
||||||
|
std::unordered_map<std::string, ConnectionStatus> connection_status_;
|
||||||
};
|
};
|
||||||
} // namespace crossdesk
|
} // namespace crossdesk
|
||||||
#endif
|
#endif
|
||||||
@@ -403,7 +403,7 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
props->connection_status_ = status;
|
props->connection_status_ = status;
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ConnectionStatus::Connected:
|
case ConnectionStatus::Connected: {
|
||||||
if (!render->need_to_create_stream_window_ &&
|
if (!render->need_to_create_stream_window_ &&
|
||||||
!render->client_properties_.empty()) {
|
!render->client_properties_.empty()) {
|
||||||
render->need_to_create_stream_window_ = true;
|
render->need_to_create_stream_window_ = true;
|
||||||
@@ -414,15 +414,10 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
(int)render->stream_window_width_,
|
(int)render->stream_window_width_,
|
||||||
(int)(render->stream_window_height_ - render->title_bar_height_)};
|
(int)(render->stream_window_height_ - render->title_bar_height_)};
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ConnectionStatus::Disconnected:
|
case ConnectionStatus::Disconnected:
|
||||||
case ConnectionStatus::Failed:
|
case ConnectionStatus::Failed:
|
||||||
case ConnectionStatus::Closed:
|
case ConnectionStatus::Closed: {
|
||||||
render->password_validating_time_ = 0;
|
|
||||||
render->start_screen_capturer_ = false;
|
|
||||||
render->start_speaker_capturer_ = false;
|
|
||||||
render->start_mouse_controller_ = false;
|
|
||||||
render->start_keyboard_capturer_ = false;
|
|
||||||
render->control_mouse_ = false;
|
|
||||||
props->connection_established_ = false;
|
props->connection_established_ = false;
|
||||||
props->mouse_control_button_pressed_ = false;
|
props->mouse_control_button_pressed_ = false;
|
||||||
if (props->dst_buffer_) {
|
if (props->dst_buffer_) {
|
||||||
@@ -431,8 +426,10 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
props->texture_width_);
|
props->texture_width_);
|
||||||
}
|
}
|
||||||
render->CleanSubStreamWindowProperties(props);
|
render->CleanSubStreamWindowProperties(props);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ConnectionStatus::IncorrectPassword:
|
}
|
||||||
|
case ConnectionStatus::IncorrectPassword: {
|
||||||
render->password_validating_ = false;
|
render->password_validating_ = false;
|
||||||
render->password_validating_time_++;
|
render->password_validating_time_++;
|
||||||
if (render->connect_button_pressed_) {
|
if (render->connect_button_pressed_) {
|
||||||
@@ -442,39 +439,53 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
localization::connect[render->localization_language_index_];
|
localization::connect[render->localization_language_index_];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ConnectionStatus::NoSuchTransmissionId:
|
}
|
||||||
|
case ConnectionStatus::NoSuchTransmissionId: {
|
||||||
if (render->connect_button_pressed_) {
|
if (render->connect_button_pressed_) {
|
||||||
props->connection_established_ = false;
|
props->connection_established_ = false;
|
||||||
render->connect_button_label_ =
|
render->connect_button_label_ =
|
||||||
localization::connect[render->localization_language_index_];
|
localization::connect[render->localization_language_index_];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
render->is_client_mode_ = false;
|
render->is_client_mode_ = false;
|
||||||
render->show_connection_status_window_ = true;
|
render->show_connection_status_window_ = true;
|
||||||
|
render->connection_status_[remote_id] = status;
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ConnectionStatus::Connected:
|
case ConnectionStatus::Connected: {
|
||||||
render->need_to_send_host_info_ = true;
|
render->need_to_send_host_info_ = true;
|
||||||
render->start_screen_capturer_ = true;
|
render->start_screen_capturer_ = true;
|
||||||
render->start_speaker_capturer_ = true;
|
render->start_speaker_capturer_ = true;
|
||||||
render->start_mouse_controller_ = true;
|
render->start_mouse_controller_ = true;
|
||||||
break;
|
break;
|
||||||
case ConnectionStatus::Closed:
|
}
|
||||||
render->start_screen_capturer_ = false;
|
case ConnectionStatus::Closed: {
|
||||||
render->start_speaker_capturer_ = false;
|
if (std::all_of(render->connection_status_.begin(),
|
||||||
render->start_mouse_controller_ = false;
|
render->connection_status_.end(), [](const auto& kv) {
|
||||||
render->start_keyboard_capturer_ = false;
|
return kv.second == ConnectionStatus::Closed ||
|
||||||
render->need_to_send_host_info_ = false;
|
kv.second == ConnectionStatus::Failed ||
|
||||||
if (props) props->connection_established_ = false;
|
kv.second == ConnectionStatus::Disconnected;
|
||||||
if (render->audio_capture_) {
|
})) {
|
||||||
render->StopSpeakerCapturer();
|
render->start_screen_capturer_ = false;
|
||||||
render->audio_capture_ = false;
|
render->start_speaker_capturer_ = false;
|
||||||
|
render->start_mouse_controller_ = false;
|
||||||
|
render->start_keyboard_capturer_ = false;
|
||||||
|
render->need_to_send_host_info_ = false;
|
||||||
|
if (props) props->connection_established_ = false;
|
||||||
|
if (render->audio_capture_) {
|
||||||
|
render->StopSpeakerCapturer();
|
||||||
|
render->audio_capture_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
render->connection_status_.erase(remote_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Submodule submodules/minirtc updated: ec3aa094e7...ac85966241
Reference in New Issue
Block a user