summaryrefslogtreecommitdiffhomepage
path: root/StarsEx
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-03-23 17:27:43 +0100
committerAki <please@ignore.pl>2024-03-23 17:27:43 +0100
commitb46eb9c1843cb4babc550003e243bd07a6a96cdc (patch)
tree8f9a3c01a594a7c1a389811124258f4beaf89587 /StarsEx
parenta5f3eadd4239bfa5df64badabb2b9897f686aded (diff)
downloadstarshatter-b46eb9c1843cb4babc550003e243bd07a6a96cdc.zip
starshatter-b46eb9c1843cb4babc550003e243bd07a6a96cdc.tar.gz
starshatter-b46eb9c1843cb4babc550003e243bd07a6a96cdc.tar.bz2
You may now edit saved multiplayer servers in-game
Diffstat (limited to 'StarsEx')
-rw-r--r--StarsEx/NetAddrDlg.cpp65
-rw-r--r--StarsEx/NetAddrDlg.h5
-rw-r--r--StarsEx/NetClientConfig.cpp27
-rw-r--r--StarsEx/NetClientConfig.h9
-rw-r--r--StarsEx/NetClientDlg.cpp47
-rw-r--r--StarsEx/NetClientDlg.h2
6 files changed, 113 insertions, 42 deletions
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 <Text.h>
+
#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<NetServerInfo>& 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;