From 880c2949c3c5a873956b8194a59af78171d8e417 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Tue, 6 Aug 2024 17:27:40 +0800 Subject: [PATCH] [feat] Use server to generate transmission id and client id --- src/single_window/layout_style.h | 2 +- src/single_window/local_peer_window.cpp | 14 +++++++++++--- src/single_window/remote_peer_window.cpp | 3 +-- src/single_window/render.cpp | 17 +++++++++-------- src/single_window/render.h | 9 ++++++--- src/single_window/render_callback_func.cpp | 17 ++++++++++++++--- thirdparty/projectx | 2 +- 7 files changed, 43 insertions(+), 21 deletions(-) diff --git a/src/single_window/layout_style.h b/src/single_window/layout_style.h index 87f733e..c27652e 100644 --- a/src/single_window/layout_style.h +++ b/src/single_window/layout_style.h @@ -15,7 +15,7 @@ #define REMOTE_WINDOW_HEIGHT_CN 280 #define MENU_WINDOW_WIDTH_EN 190 #define MENU_WINDOW_HEIGHT_EN 245 -#define IPUT_WINDOW_WIDTH 190 +#define IPUT_WINDOW_WIDTH 160 #define INPUT_WINDOW_PADDING_CN 66 #define INPUT_WINDOW_PADDING_EN 96 #define SETTINGS_WINDOW_WIDTH_CN 181 diff --git a/src/single_window/local_peer_window.cpp b/src/single_window/local_peer_window.cpp index 8213237..1ae03cd 100644 --- a/src/single_window/local_peer_window.cpp +++ b/src/single_window/local_peer_window.cpp @@ -47,9 +47,17 @@ int Render::LocalWindow() { ImGui::SetNextItemWidth(IPUT_WINDOW_WIDTH); ImGui::SetWindowFontScale(1.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); + + std::string client_id_show = ""; + for (int i = 0; i < sizeof(client_id_); i++) { + client_id_show += client_id_[i]; + if (i == 2 || i == 5) { + client_id_show += " "; + } + } + ImGui::InputText( - "##local_id", (char *)mac_addr_str_.c_str(), - mac_addr_str_.length() + 1, + "##local_id", (char *)client_id_show.c_str(), sizeof(client_id_show), ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_ReadOnly); ImGui::PopStyleVar(); @@ -61,7 +69,7 @@ int Render::LocalWindow() { if (ImGui::Button(ICON_FA_COPY, ImVec2(35, 38))) { local_id_copied_ = true; - ImGui::SetClipboardText(mac_addr_str_.c_str()); + ImGui::SetClipboardText(client_id_); copy_start_time_ = ImGui::GetTime(); } diff --git a/src/single_window/remote_peer_window.cpp b/src/single_window/remote_peer_window.cpp index 0f9e962..771486b 100644 --- a/src/single_window/remote_peer_window.cpp +++ b/src/single_window/remote_peer_window.cpp @@ -61,8 +61,7 @@ int Render::RemoteWindow() { peer_reserved_ = CreatePeer(¶ms_); if (peer_reserved_) { LOG_INFO("Create peer[reserved] instance successful"); - std::string local_id = "C-" + mac_addr_str_; - Init(peer_reserved_, local_id.c_str()); + Init(peer_reserved_, ""); LOG_INFO("Peer[reserved] init finish"); } else { LOG_INFO("Create peer[reserved] instance failed"); diff --git a/src/single_window/render.cpp b/src/single_window/render.cpp index 2f4c16b..bbb1dce 100644 --- a/src/single_window/render.cpp +++ b/src/single_window/render.cpp @@ -73,6 +73,7 @@ int Render::SaveSettingsIntoCacheFile() { } fseek(cd_cache_file_, 0, SEEK_SET); + strncpy(cd_cache_.client_id, client_id_, sizeof(client_id_)); strncpy(cd_cache_.password, password_saved_.c_str(), password_saved_.length()); memcpy(&cd_cache_.language, &language_button_value_, @@ -98,6 +99,8 @@ int Render::LoadSettingsIntoCacheFile() { fseek(cd_cache_file_, 0, SEEK_SET); fread(&cd_cache_, sizeof(cd_cache_), 1, cd_cache_file_); fclose(cd_cache_file_); + + strncpy(client_id_, cd_cache_.client_id, sizeof(client_id_)); password_saved_ = cd_cache_.password; language_button_value_ = cd_cache_.language; video_quality_button_value_ = cd_cache_.video_quality; @@ -241,10 +244,9 @@ int Render::CreateConnectionPeer() { peer_ = CreatePeer(¶ms_); if (peer_) { - LOG_INFO("Create peer instance successful"); - local_id_ = mac_addr_str_; - Init(peer_, local_id_.c_str()); - LOG_INFO("Peer init finish"); + LOG_INFO("[{}] Create peer instance successful", client_id_); + Init(peer_, client_id_); + LOG_INFO("[{}] Peer init finish", client_id_); } else { LOG_INFO("Create peer instance failed"); } @@ -396,10 +398,9 @@ int Render::Run() { while (!exit_) { if (SignalStatus::SignalConnected == signal_status_ && !is_create_connection_) { - is_create_connection_ = CreateConnection(peer_, mac_addr_str_.c_str(), - password_saved_.c_str()) - ? false - : true; + is_create_connection_ = + CreateConnection(peer_, client_id_, password_saved_.c_str()) ? false + : true; LOG_INFO("Connected with signal server, create p2p connection"); } diff --git a/src/single_window/render.h b/src/single_window/render.h index 25a9efc..4385bc8 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -60,8 +60,9 @@ class Render { static void OnConnectionStatusCb(ConnectionStatus status, void *user_data); - static void NetStatusReport(TraversalMode mode, const unsigned short send, - const unsigned short receive, void *user_ptr); + static void NetStatusReport(int TransmissionId, TraversalMode mode, + const unsigned short send, + const unsigned short receive, void *user_data); static SDL_HitTestResult HitTestCallback(SDL_Window *window, const SDL_Point *area, void *data); @@ -89,6 +90,7 @@ class Render { private: typedef struct { + char client_id[10]; char password[7]; int language; int video_quality; @@ -118,7 +120,6 @@ class Render { char input_password_tmp_[7] = ""; char input_password_[7] = ""; std::string random_password_ = ""; - std::string password_saved_ = ""; std::string remote_password_ = ""; std::string local_id_ = ""; char remote_id_[20] = ""; @@ -251,6 +252,8 @@ class Render { #endif private: + char client_id_[10] = ""; + std::string password_saved_ = ""; int language_button_value_ = 0; int video_quality_button_value_ = 0; int video_encode_format_button_value_ = 0; diff --git a/src/single_window/render_callback_func.cpp b/src/single_window/render_callback_func.cpp index 4759778..cc2c1f8 100644 --- a/src/single_window/render_callback_func.cpp +++ b/src/single_window/render_callback_func.cpp @@ -1,5 +1,6 @@ #include "device_controller.h" #include "localization.h" +#include "rd_log.h" #include "render.h" // Refresh Event @@ -230,7 +231,17 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) { } } -void Render::NetStatusReport(TraversalMode mode, const unsigned short send, - const unsigned short receive, void *user_ptr) { - printf("Net mode: [%d]\n", mode); +void Render::NetStatusReport(int TransmissionId, TraversalMode mode, + const unsigned short send, + const unsigned short receive, void *user_data) { + Render *render = (Render *)user_data; + if (TransmissionId != 0) { + std::string client_id = std::to_string(TransmissionId); + strncpy(render->client_id_, client_id.c_str(), sizeof(client_id)); + render->SaveSettingsIntoCacheFile(); + LOG_INFO("Transmission id: [{}]", TransmissionId); + } + if (mode != TraversalMode::UnknownMode) { + LOG_INFO("Net mode: [{}]", int(mode)); + } } \ No newline at end of file diff --git a/thirdparty/projectx b/thirdparty/projectx index 0edeec3..3453d4e 160000 --- a/thirdparty/projectx +++ b/thirdparty/projectx @@ -1 +1 @@ -Subproject commit 0edeec3d16930ea444fc56253fbbc3169eb130e0 +Subproject commit 3453d4e0c4de8805bfc1ff3b18e75613950b03d1