[feat] Use server to generate transmission id and client id

This commit is contained in:
dijunkun
2024-08-06 17:27:40 +08:00
parent 07f5fe81c8
commit 880c2949c3
7 changed files with 43 additions and 21 deletions

View File

@@ -15,7 +15,7 @@
#define REMOTE_WINDOW_HEIGHT_CN 280 #define REMOTE_WINDOW_HEIGHT_CN 280
#define MENU_WINDOW_WIDTH_EN 190 #define MENU_WINDOW_WIDTH_EN 190
#define MENU_WINDOW_HEIGHT_EN 245 #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_CN 66
#define INPUT_WINDOW_PADDING_EN 96 #define INPUT_WINDOW_PADDING_EN 96
#define SETTINGS_WINDOW_WIDTH_CN 181 #define SETTINGS_WINDOW_WIDTH_CN 181

View File

@@ -47,9 +47,17 @@ int Render::LocalWindow() {
ImGui::SetNextItemWidth(IPUT_WINDOW_WIDTH); ImGui::SetNextItemWidth(IPUT_WINDOW_WIDTH);
ImGui::SetWindowFontScale(1.0f); ImGui::SetWindowFontScale(1.0f);
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 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( ImGui::InputText(
"##local_id", (char *)mac_addr_str_.c_str(), "##local_id", (char *)client_id_show.c_str(), sizeof(client_id_show),
mac_addr_str_.length() + 1,
ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_ReadOnly); ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_ReadOnly);
ImGui::PopStyleVar(); ImGui::PopStyleVar();
@@ -61,7 +69,7 @@ int Render::LocalWindow() {
if (ImGui::Button(ICON_FA_COPY, ImVec2(35, 38))) { if (ImGui::Button(ICON_FA_COPY, ImVec2(35, 38))) {
local_id_copied_ = true; local_id_copied_ = true;
ImGui::SetClipboardText(mac_addr_str_.c_str()); ImGui::SetClipboardText(client_id_);
copy_start_time_ = ImGui::GetTime(); copy_start_time_ = ImGui::GetTime();
} }

View File

@@ -61,8 +61,7 @@ int Render::RemoteWindow() {
peer_reserved_ = CreatePeer(&params_); peer_reserved_ = CreatePeer(&params_);
if (peer_reserved_) { if (peer_reserved_) {
LOG_INFO("Create peer[reserved] instance successful"); LOG_INFO("Create peer[reserved] instance successful");
std::string local_id = "C-" + mac_addr_str_; Init(peer_reserved_, "");
Init(peer_reserved_, local_id.c_str());
LOG_INFO("Peer[reserved] init finish"); LOG_INFO("Peer[reserved] init finish");
} else { } else {
LOG_INFO("Create peer[reserved] instance failed"); LOG_INFO("Create peer[reserved] instance failed");

View File

@@ -73,6 +73,7 @@ int Render::SaveSettingsIntoCacheFile() {
} }
fseek(cd_cache_file_, 0, SEEK_SET); 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(), strncpy(cd_cache_.password, password_saved_.c_str(),
password_saved_.length()); password_saved_.length());
memcpy(&cd_cache_.language, &language_button_value_, memcpy(&cd_cache_.language, &language_button_value_,
@@ -98,6 +99,8 @@ int Render::LoadSettingsIntoCacheFile() {
fseek(cd_cache_file_, 0, SEEK_SET); fseek(cd_cache_file_, 0, SEEK_SET);
fread(&cd_cache_, sizeof(cd_cache_), 1, cd_cache_file_); fread(&cd_cache_, sizeof(cd_cache_), 1, cd_cache_file_);
fclose(cd_cache_file_); fclose(cd_cache_file_);
strncpy(client_id_, cd_cache_.client_id, sizeof(client_id_));
password_saved_ = cd_cache_.password; password_saved_ = cd_cache_.password;
language_button_value_ = cd_cache_.language; language_button_value_ = cd_cache_.language;
video_quality_button_value_ = cd_cache_.video_quality; video_quality_button_value_ = cd_cache_.video_quality;
@@ -241,10 +244,9 @@ int Render::CreateConnectionPeer() {
peer_ = CreatePeer(&params_); peer_ = CreatePeer(&params_);
if (peer_) { if (peer_) {
LOG_INFO("Create peer instance successful"); LOG_INFO("[{}] Create peer instance successful", client_id_);
local_id_ = mac_addr_str_; Init(peer_, client_id_);
Init(peer_, local_id_.c_str()); LOG_INFO("[{}] Peer init finish", client_id_);
LOG_INFO("Peer init finish");
} else { } else {
LOG_INFO("Create peer instance failed"); LOG_INFO("Create peer instance failed");
} }
@@ -396,9 +398,8 @@ int Render::Run() {
while (!exit_) { while (!exit_) {
if (SignalStatus::SignalConnected == signal_status_ && if (SignalStatus::SignalConnected == signal_status_ &&
!is_create_connection_) { !is_create_connection_) {
is_create_connection_ = CreateConnection(peer_, mac_addr_str_.c_str(), is_create_connection_ =
password_saved_.c_str()) CreateConnection(peer_, client_id_, password_saved_.c_str()) ? false
? false
: true; : true;
LOG_INFO("Connected with signal server, create p2p connection"); LOG_INFO("Connected with signal server, create p2p connection");
} }

View File

@@ -60,8 +60,9 @@ class Render {
static void OnConnectionStatusCb(ConnectionStatus status, void *user_data); static void OnConnectionStatusCb(ConnectionStatus status, void *user_data);
static void NetStatusReport(TraversalMode mode, const unsigned short send, static void NetStatusReport(int TransmissionId, TraversalMode mode,
const unsigned short receive, void *user_ptr); const unsigned short send,
const unsigned short receive, void *user_data);
static SDL_HitTestResult HitTestCallback(SDL_Window *window, static SDL_HitTestResult HitTestCallback(SDL_Window *window,
const SDL_Point *area, void *data); const SDL_Point *area, void *data);
@@ -89,6 +90,7 @@ class Render {
private: private:
typedef struct { typedef struct {
char client_id[10];
char password[7]; char password[7];
int language; int language;
int video_quality; int video_quality;
@@ -118,7 +120,6 @@ class Render {
char input_password_tmp_[7] = ""; char input_password_tmp_[7] = "";
char input_password_[7] = ""; char input_password_[7] = "";
std::string random_password_ = ""; std::string random_password_ = "";
std::string password_saved_ = "";
std::string remote_password_ = ""; std::string remote_password_ = "";
std::string local_id_ = ""; std::string local_id_ = "";
char remote_id_[20] = ""; char remote_id_[20] = "";
@@ -251,6 +252,8 @@ class Render {
#endif #endif
private: private:
char client_id_[10] = "";
std::string password_saved_ = "";
int language_button_value_ = 0; int language_button_value_ = 0;
int video_quality_button_value_ = 0; int video_quality_button_value_ = 0;
int video_encode_format_button_value_ = 0; int video_encode_format_button_value_ = 0;

View File

@@ -1,5 +1,6 @@
#include "device_controller.h" #include "device_controller.h"
#include "localization.h" #include "localization.h"
#include "rd_log.h"
#include "render.h" #include "render.h"
// Refresh Event // Refresh Event
@@ -230,7 +231,17 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
} }
} }
void Render::NetStatusReport(TraversalMode mode, const unsigned short send, void Render::NetStatusReport(int TransmissionId, TraversalMode mode,
const unsigned short receive, void *user_ptr) { const unsigned short send,
printf("Net mode: [%d]\n", mode); 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));
}
} }