[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 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

View File

@@ -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();
}

View File

@@ -61,8 +61,7 @@ int Render::RemoteWindow() {
peer_reserved_ = CreatePeer(&params_);
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");

View File

@@ -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(&params_);
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");
}

View File

@@ -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;

View File

@@ -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));
}
}