diff --git a/src/single_window/local_peer_window.cpp b/src/single_window/local_peer_window.cpp index 7cdc491..1c621a6 100644 --- a/src/single_window/local_peer_window.cpp +++ b/src/single_window/local_peer_window.cpp @@ -48,16 +48,17 @@ int Render::LocalWindow() { ImGui::SetWindowFontScale(1.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); - std::string client_id_show = ""; + std::string client_id_display = ""; for (int i = 0; i < sizeof(client_id_); i++) { - client_id_show += client_id_[i]; + client_id_display += client_id_[i]; if (i == 2 || i == 5) { - client_id_show += " "; + client_id_display += " "; } } ImGui::InputText( - "##local_id", (char *)client_id_show.c_str(), sizeof(client_id_show), + "##local_id", (char *)client_id_display.c_str(), + sizeof(client_id_display), ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_ReadOnly); ImGui::PopStyleVar(); diff --git a/src/single_window/remote_peer_window.cpp b/src/single_window/remote_peer_window.cpp index 1bb5564..9087ce1 100644 --- a/src/single_window/remote_peer_window.cpp +++ b/src/single_window/remote_peer_window.cpp @@ -4,6 +4,13 @@ #include "rd_log.h" #include "render.h" +static int InputTextCallback(ImGuiInputTextCallbackData *data) { + if (data->CursorPos == 3 || data->CursorPos == 7) { + data->InsertChars(data->CursorPos, " "); + } + return 0; +} + int Render::RemoteWindow() { ImGui::SetNextWindowPos(ImVec2(local_window_width_ - 1, title_bar_height_), ImGuiCond_Always); @@ -47,9 +54,12 @@ int Render::RemoteWindow() { ImGui::SetWindowFontScale(1.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); bool enter_pressed = ImGui::InputText( - "##remote_id_", remote_id_, IM_ARRAYSIZE(remote_id_), - ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | - ImGuiInputTextFlags_EnterReturnsTrue); + "##remote_id_", remote_id_display_, IM_ARRAYSIZE(remote_id_display_), + ImGuiInputTextFlags_CharsUppercase | + ImGuiInputTextFlags_EnterReturnsTrue | + ImGuiInputTextFlags_CallbackEdit | ImGuiInputTextFlags_CharsNoBlank, + InputTextCallback); + ImGui::PopStyleVar(); ImGui::SameLine(); if (ImGui::Button(ICON_FA_ARROW_RIGHT_LONG, ImVec2(55, 38)) || @@ -59,7 +69,11 @@ int Render::RemoteWindow() { int ret = -1; if (signal_connected_) { if (!connection_established_) { - if (0 == strcmp(remote_id_, client_id_) && !peer_reserved_) { + remote_id_ = remote_id_display_; + remote_id_.erase(remove_if(remote_id_.begin(), remote_id_.end(), + static_cast(&isspace)), + remote_id_.end()); + if (0 == strcmp(remote_id_.c_str(), client_id_) && !peer_reserved_) { peer_reserved_ = CreatePeer(¶ms_); if (peer_reserved_) { LOG_INFO("Create peer[reserved] instance successful"); @@ -72,7 +86,7 @@ int Render::RemoteWindow() { } } ret = JoinConnection(peer_reserved_ ? peer_reserved_ : peer_, - remote_id_, remote_password_.c_str()); + remote_id_.c_str(), remote_password_.c_str()); if (0 == ret) { is_client_mode_ = true; rejoin_ = false; diff --git a/src/single_window/render.cpp b/src/single_window/render.cpp index 8d419d6..7b494df 100644 --- a/src/single_window/render.cpp +++ b/src/single_window/render.cpp @@ -499,7 +499,8 @@ int Render::Run() { LOG_INFO("Return to main interface"); streaming_ = false; LOG_INFO("[{}] Leave connection [{}]", client_id_, remote_id_); - LeaveConnection(peer_reserved_ ? peer_reserved_ : peer_, remote_id_); + LeaveConnection(peer_reserved_ ? peer_reserved_ : peer_, + remote_id_.c_str()); rejoin_ = false; memset(audio_buffer_, 0, 960); connection_established_ = false; diff --git a/src/single_window/render.h b/src/single_window/render.h index 01a9438..796e8a3 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -122,8 +122,8 @@ class Render { char input_password_[7] = ""; std::string random_password_ = ""; std::string remote_password_ = ""; - std::string local_id_ = ""; - char remote_id_[20] = ""; + char remote_id_display_[12] = ""; + std::string remote_id_ = ""; char client_password_[20] = ""; private: