From b46eb9c1843cb4babc550003e243bd07a6a96cdc Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 23 Mar 2024 17:27:43 +0100 Subject: You may now edit saved multiplayer servers in-game --- StarsEx/NetAddrDlg.cpp | 65 ++++++++++++++++++++++++++++++++------------- StarsEx/NetAddrDlg.h | 5 ++++ StarsEx/NetClientConfig.cpp | 27 ++++++++++++++++++- StarsEx/NetClientConfig.h | 9 +++---- StarsEx/NetClientDlg.cpp | 47 +++++++++++++++++++++----------- StarsEx/NetClientDlg.h | 2 ++ 6 files changed, 113 insertions(+), 42 deletions(-) (limited to 'StarsEx') diff --git a/StarsEx/NetAddrDlg.cpp b/StarsEx/NetAddrDlg.cpp index 627ad5e..b7591e0 100644 --- a/StarsEx/NetAddrDlg.cpp +++ b/StarsEx/NetAddrDlg.cpp @@ -12,19 +12,20 @@ */ #include "NetAddrDlg.h" -#include "MenuScreen.h" -#include "NetClientConfig.h" -#include "Game.h" +#include + #include "Button.h" #include "EditBox.h" -#include "ListBox.h" -#include "Slider.h" -#include "Video.h" +#include "FormatUtil.h" #include "Keyboard.h" +#include "ListBox.h" +#include "MenuScreen.h" #include "Mouse.h" +#include "NetClientConfig.h" +#include "NetLobby.h" #include "ParseUtil.h" -#include "FormatUtil.h" +#include "Slider.h" // +--------------------------------------------------------------------+ // DECLARE MAPPING FUNCTIONS: @@ -34,9 +35,16 @@ DEF_MAP_CLIENT(NetAddrDlg, OnCancel); // +--------------------------------------------------------------------+ -NetAddrDlg::NetAddrDlg(Screen* s, FormDef& def, MenuScreen* mgr) -: FormWindow(s, 0, 0, s->Width(), s->Height()), manager(mgr), -btn_save(0), btn_cancel(0), edt_name(0), edt_addr(0), edt_port(0), edt_pass(0) +NetAddrDlg::NetAddrDlg(Screen* s, FormDef& def, MenuScreen* mgr) : + FormWindow(s, 0, 0, s->Width(), s->Height()), + manager {mgr}, + btn_save {nullptr}, + btn_cancel {nullptr}, + edt_name {nullptr}, + edt_addr {nullptr}, + edt_port {nullptr}, + edt_pass {nullptr}, + selected_config {NEW} { Init(def); } @@ -72,14 +80,22 @@ NetAddrDlg::RegisterControls() void NetAddrDlg::Show() { - if (!IsShown()) { - FormWindow::Show(); - + auto* config = NetClientConfig::GetInstance(); + if (selected_config != NEW && config != nullptr) { + auto* info = config->GetServerInfo(selected_config); + if (edt_name) edt_name->SetText(info->name); + if (edt_addr) edt_addr->SetText(info->hostname); + if (edt_port) edt_port->SetText(Text::format("%d", info->port)); + if (edt_pass) edt_pass->SetText(info->password); + } + else { if (edt_name) edt_name->SetText(""); if (edt_addr) edt_addr->SetText(""); if (edt_port) edt_port->SetText(""); if (edt_pass) edt_pass->SetText(""); - + } + if (!IsShown()) { + FormWindow::Show(); if (edt_name) edt_name->SetFocus(); } } @@ -103,10 +119,7 @@ NetAddrDlg::OnSave(AWEvent* event) { NetClientConfig* config = NetClientConfig::GetInstance(); - if (config && - edt_addr && edt_addr->GetText().length() > 0 && - edt_port && edt_port->GetText().length() > 0) - { + if (config && edt_addr && edt_addr->GetText().length() > 0 && edt_port && edt_port->GetText().length() > 0) { Text name; Text addr; Text pass; @@ -141,7 +154,10 @@ NetAddrDlg::OnSave(AWEvent* event) addr = SafeQuotes(buffer); } - config->AddServer(name, addr, port, pass, true); + if (selected_config == NEW) + config->AddServer(name, addr, port, pass, true); + else + config->UpdateServer(selected_config, name, addr, port, pass); config->Save(); } @@ -155,3 +171,14 @@ NetAddrDlg::OnCancel(AWEvent* event) if (manager) manager->ShowNetClientDlg(); } + + +void +NetAddrDlg::SelectConfig(int index) +{ + if (auto* config = NetClientConfig::GetInstance()) { + const auto list = config->GetServerList(); + const bool exists = (0 <= index && index < list.size()); + selected_config = exists ? index : NEW; + } +} diff --git a/StarsEx/NetAddrDlg.h b/StarsEx/NetAddrDlg.h index c5caab9..3580497 100644 --- a/StarsEx/NetAddrDlg.h +++ b/StarsEx/NetAddrDlg.h @@ -44,6 +44,8 @@ public: virtual void OnSave(AWEvent* event); virtual void OnCancel(AWEvent* event); + void SelectConfig(int index=NEW); + protected: MenuScreen* manager; @@ -53,6 +55,9 @@ protected: EditBox* edt_addr; EditBox* edt_port; EditBox* edt_pass; + + static constexpr int NEW = {-1}; + int selected_config; }; #endif // NetAddrDlg_h diff --git a/StarsEx/NetClientConfig.cpp b/StarsEx/NetClientConfig.cpp index 69dda99..061ae89 100644 --- a/StarsEx/NetClientConfig.cpp +++ b/StarsEx/NetClientConfig.cpp @@ -62,7 +62,7 @@ void NetClientConfig::AddServer(const char* name, const char* addr, WORD port, const char* pass, bool save) { if (!addr || !*addr || port < 1024 || port > 48000) - return; + return; char buffer[1024]; if (name && *name) @@ -87,6 +87,31 @@ NetClientConfig::AddServer(const char* name, const char* addr, WORD port, const } void +NetClientConfig::UpdateServer(int index, const char* name, const char* addr, WORD port, const char* pass) +{ + if (index < 0 || index >= servers.size() || !addr || !*addr || port < 1024 || port > 48000) + return; + + char buffer[1024]; + if (name && *name) + strcpy_s(buffer, name); + else + sprintf_s(buffer, "%s:%d", addr, port); + + auto* server = servers[index]; + server->name = buffer; + server->hostname = addr; + server->addr = NetAddr(addr, port); + server->port = port; + server->password = pass; + + if (server->addr.IPAddr() == 0) { + Print("NetClientConfig::UpdateServer(%d, %s, %s, %d) failed to resolve IP Addr\n", + index, name, addr, port); + } +} + +void NetClientConfig::DelServer(int index) { if (index >= 0 && index < servers.size()) { diff --git a/StarsEx/NetClientConfig.h b/StarsEx/NetClientConfig.h index bce0cf5..ff547be 100644 --- a/StarsEx/NetClientConfig.h +++ b/StarsEx/NetClientConfig.h @@ -30,12 +30,9 @@ public: NetClientConfig(); ~NetClientConfig(); - void AddServer(const char* name, - const char* addr, - WORD port, - const char* password, - bool save=false); - void DelServer(int index); + void AddServer(const char* name, const char* addr, WORD port, const char* password, bool save=false); + void UpdateServer(int index, const char* name, const char* addr, WORD port, const char* password); + void DelServer(int index); List& GetServerList() { return servers; } NetServerInfo* GetServerInfo(int n); diff --git a/StarsEx/NetClientDlg.cpp b/StarsEx/NetClientDlg.cpp index a478d15..03077f7 100644 --- a/StarsEx/NetClientDlg.cpp +++ b/StarsEx/NetClientDlg.cpp @@ -12,27 +12,24 @@ */ #include "NetClientDlg.h" -#include "NetClientConfig.h" -#include "NetLobbyClient.h" -#include "MenuScreen.h" -#include "Starshatter.h" -#include "Ship.h" -#include "HUDView.h" - -#include "NetAddr.h" -#include "ContentBundle.h" #include "Button.h" +#include "ContentBundle.h" +#include "Keyboard.h" #include "ListBox.h" +#include "MenuScreen.h" +#include "NetAddrDlg.h" +#include "NetAddr.h" +#include "NetClientConfig.h" +#include "NetLobbyClient.h" #include "Slider.h" -#include "Video.h" -#include "Keyboard.h" // +--------------------------------------------------------------------+ // DECLARE MAPPING FUNCTIONS: DEF_MAP_CLIENT(NetClientDlg, OnSelect); DEF_MAP_CLIENT(NetClientDlg, OnAdd); +DEF_MAP_CLIENT(NetClientDlg, OnEdit); DEF_MAP_CLIENT(NetClientDlg, OnDel); DEF_MAP_CLIENT(NetClientDlg, OnServer); DEF_MAP_CLIENT(NetClientDlg, OnHost); @@ -70,7 +67,8 @@ void NetClientDlg::RegisterControls() { btn_add = (Button*) FindControl(101); - btn_del = (Button*) FindControl(102); + btn_edit = (Button*) FindControl(102); + btn_del = (Button*) FindControl(103); lst_servers = (ListBox*) FindControl(200); lbl_info = FindControl(210); btn_server = (Button*) FindControl(301); @@ -79,6 +77,7 @@ NetClientDlg::RegisterControls() btn_cancel = (Button*) FindControl(2); REGISTER_CLIENT(EID_CLICK, btn_add, NetClientDlg, OnAdd); + REGISTER_CLIENT(EID_CLICK, btn_edit, NetClientDlg, OnEdit); REGISTER_CLIENT(EID_CLICK, btn_del, NetClientDlg, OnDel); REGISTER_CLIENT(EID_SELECT, lst_servers, NetClientDlg, OnSelect); REGISTER_CLIENT(EID_CLICK, btn_server, NetClientDlg, OnServer); @@ -133,9 +132,9 @@ NetClientDlg::ExecFrame() NetServerInfo* info = config->GetServerInfo(server_index); - bool del_enabled = info != 0; - bool join_enabled = info != 0 && info->status > NetServerInfo::OFFLINE; - bool host_enabled = join_enabled && info->hosted == 0; + const bool server_selected = info != 0; + const bool join_enabled = server_selected && info->status > NetServerInfo::OFFLINE; + const bool host_enabled = join_enabled && info->hosted == 0; if (btn_host) btn_host->SetEnabled(host_enabled); @@ -144,7 +143,10 @@ NetClientDlg::ExecFrame() btn_join->SetEnabled(join_enabled); if (btn_del) - btn_del->SetEnabled(del_enabled); + btn_del->SetEnabled(server_selected); + + if (btn_edit) + btn_edit->SetEnabled(server_selected); } // +--------------------------------------------------------------------+ @@ -342,10 +344,23 @@ DWORD WINAPI NetClientPingProc(LPVOID link) void NetClientDlg::OnAdd(AWEvent* event) { + if (auto dialog = manager->GetNetAddrDlg()) + dialog->SelectConfig(); manager->ShowNetAddrDlg(); } void +NetClientDlg::OnEdit(AWEvent* event) +{ + if (config && server_index >= 0) { + if (auto* dialog = manager->GetNetAddrDlg()) { + dialog->SelectConfig(server_index); + } + manager->ShowNetAddrDlg(); + } +} + +void NetClientDlg::OnDel(AWEvent* event) { if (config && server_index >= 0) diff --git a/StarsEx/NetClientDlg.h b/StarsEx/NetClientDlg.h index 131b59d..3bd650d 100644 --- a/StarsEx/NetClientDlg.h +++ b/StarsEx/NetClientDlg.h @@ -44,6 +44,7 @@ public: // Operations: virtual void OnSelect(AWEvent* event); virtual void OnAdd(AWEvent* event); + virtual void OnEdit(AWEvent* event); virtual void OnDel(AWEvent* event); virtual void OnServer(AWEvent* event); virtual void OnHost(AWEvent* event); @@ -61,6 +62,7 @@ protected: NetClientConfig* config; Button* btn_add; + Button* btn_edit; Button* btn_del; ListBox* lst_servers; ActiveWindow* lbl_info; -- cgit v1.1