aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-07-07 19:42:57 +0200
committermetamuffin <metamuffin@disroot.org>2025-07-07 19:42:57 +0200
commitc5e2de764bb1ce1d38726b80636c3fa45b06c05e (patch)
tree7606abe3b47d123abb9cafe9c1bb7920aa3d3c7f
parent9be9937f75c2711d5d7fd9759ed615397fff5c7f (diff)
downloadhurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar
hurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar.bz2
hurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar.zst
implement discover tool as service.gd class
-rw-r--r--client/menu/play.gd1
-rw-r--r--client/project.godot1
-rw-r--r--client/server_list.gd48
-rw-r--r--client/service/discover.gd31
-rw-r--r--client/service/discover.gd.uid1
-rw-r--r--client/service/service.gd8
-rw-r--r--client/settings.gd4
-rw-r--r--locale/de.ini4
-rw-r--r--locale/el.ini4
-rw-r--r--locale/en.ini4
-rw-r--r--locale/es.ini4
-rw-r--r--locale/eu.ini4
-rw-r--r--locale/fi.ini4
-rw-r--r--locale/fr.ini4
-rw-r--r--locale/it.ini2
-rw-r--r--locale/ja.ini4
-rw-r--r--locale/nl.ini4
-rw-r--r--locale/ru.ini4
-rw-r--r--locale/tr.ini4
-rw-r--r--locale/zh_Hans.ini4
-rw-r--r--locale/zh_Hant.ini2
21 files changed, 79 insertions, 67 deletions
diff --git a/client/menu/play.gd b/client/menu/play.gd
index 184b3b2f..2633163e 100644
--- a/client/menu/play.gd
+++ b/client/menu/play.gd
@@ -56,6 +56,7 @@ func _ready():
Global.set_profile("registry_asked", true)
Global.save_settings()
Global.save_profile()
+
ServerList.start()
func update_server_list(lists: Array[Array]):
diff --git a/client/project.godot b/client/project.godot
index c9146766..e3bbec06 100644
--- a/client/project.godot
+++ b/client/project.godot
@@ -27,6 +27,7 @@ InputManager="*res://menu/settings/input/input_manager.gd"
ServerList="*res://server_list.gd"
Server="*res://service/server.gd"
Editor="*res://service/editor.gd"
+Discover="*res://service/discover.gd"
[debug]
diff --git a/client/server_list.gd b/client/server_list.gd
index c3fc1f27..57c6e89f 100644
--- a/client/server_list.gd
+++ b/client/server_list.gd
@@ -35,9 +35,6 @@ var loading := false
var mdns := HTTPRequest.new()
var reg := HTTPRequest.new()
-var thread: Thread
-var pid: int = -1
-
# Fallback to http, since there seems to be a problem related to mbed tls in Godot.
# See: https://github.com/godotengine/godot/issues/96103
var using_http_fallback := false
@@ -65,33 +62,19 @@ func _ready() -> void:
add_child(timeout)
mdns.request_completed.connect(_on_request_completed.bind(Registry.MDNS))
reg.request_completed.connect(_on_request_completed.bind(Registry.GLOBAL))
- if Global.get_setting("online.use_discovery"):
- thread = Thread.new()
- thread.start(func():
- # SAFETY: reading/writing arrays/dictionaries is allowed as long as
- # the size is not changed.
- # cf.: https://docs.godotengine.org/en/4.3/tutorials/performance/thread_safe_apis.html#gdscript-arrays-dictionaries
- var res = OS.create_process(get_discovery_path(), [], false)
- # SAFETY: since this is not read until the thread stops, this should
- # probably be safe without synchronisation :)
- pid = res
- )
-
-static func get_discovery_path() -> String:
- var path: String = Global.get_setting("online.discovery_binary")
- if path != "":
- return path
- else:
- return "hurrycurry-discover"
func fetch_server_list(registry: Registry) -> void:
match registry:
Registry.MDNS:
- mdns.request(MDNS_URL, HEADERS)
+ if Global.get_setting("online.use_discover"):
+ match Discover.state:
+ Service.State.STOPPED: Discover.start()
+ Service.State.RUNNING: mdns.request(MDNS_URL, HEADERS)
Registry.GLOBAL:
- var url: String = Global.get_setting("online.registry_url")
- url = url.replace("https:", "http:") if using_http_fallback else url
- reg.request(url + "/v1/list", HEADERS)
+ if Global.get_setting("online.use_registry"):
+ var url: String = Global.get_setting("online.registry_url")
+ url = url.replace("https:", "http:") if using_http_fallback else url
+ reg.request(url + "/v1/list", HEADERS)
loading = true
update_loading.emit(true)
@@ -116,12 +99,10 @@ func _on_request_completed(result: int, _response_code: int, _headers: PackedStr
func start() -> void:
timeout.stop()
timeout.start()
- if Global.get_setting("online.use_discovery"):
- mdns_timer.start()
- fetch_server_list(Registry.MDNS)
- if Global.get_setting("online.use_registry"):
- reg_timer.start()
- fetch_server_list(Registry.GLOBAL)
+ mdns_timer.start()
+ fetch_server_list(Registry.MDNS)
+ reg_timer.start()
+ fetch_server_list(Registry.GLOBAL)
func stop() -> void:
timeout.stop()
@@ -131,8 +112,3 @@ func stop() -> void:
func one_shot() -> void:
start()
stop()
-
-func _exit_tree():
- if thread != null: thread.wait_to_finish()
- if pid != -1:
- OS.kill(pid)
diff --git a/client/service/discover.gd b/client/service/discover.gd
new file mode 100644
index 00000000..43fe5f38
--- /dev/null
+++ b/client/service/discover.gd
@@ -0,0 +1,31 @@
+# Hurry Curry! - a game about cooking
+# Copyright 2025 metamuffin
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name DiscoverService
+extends Service
+
+func name():
+ return "Discover"
+
+func arguments():
+ return []
+
+func exe_path() -> String:
+ var path: String = Global.get_setting("online.discover_binary")
+ if path != "": return path
+ else: return "hurrycurry-discover"
+
+func test_port():
+ return 27033
diff --git a/client/service/discover.gd.uid b/client/service/discover.gd.uid
new file mode 100644
index 00000000..d7ce87a2
--- /dev/null
+++ b/client/service/discover.gd.uid
@@ -0,0 +1 @@
+uid://bppjsmlmnm33p
diff --git a/client/service/service.gd b/client/service/service.gd
index f19364c7..9695714f 100644
--- a/client/service/service.gd
+++ b/client/service/service.gd
@@ -56,6 +56,7 @@ func start():
if state != State.STOPPED and state != State.FAILED:
push_error(name() + " can't be started")
return
+ print(name() + ": Starting...")
state = State.STARTING
thread = Thread.new()
thread.start(_server_exec)
@@ -64,13 +65,14 @@ func stop():
if state != State.RUNNING:
push_error(name() + " can't be stopped")
return
+ print(name() + ": Stopping...")
OS.kill(pid)
func _test_server():
var output = []
- print(name() + ": Binary path is " + exe_path())
+ print(name() + ": Testing executable " + exe_path())
thread_result = OS.execute(exe_path(), ["-v"], output, true, false)
- print(output)
+ print(name() + ": Version = " + output[0].strip_edges())
sem.post()
func _server_exec():
@@ -118,5 +120,5 @@ func _process(_delta):
pid = null
func _exit_tree():
- if pid != null: OS.kill(pid)
+ if state == State.RUNNING: stop()
if thread != null: thread.wait_to_finish()
diff --git a/client/settings.gd b/client/settings.gd
index ddecea64..00b02c24 100644
--- a/client/settings.gd
+++ b/client/settings.gd
@@ -77,8 +77,8 @@ static func get_root():
SettingsCategory.new("online", [
ToggleSetting.new("use_registry", false),
TextSetting.new("registry_url", "https://hurrycurry-registry.metamuffin.org/"),
- ToggleSetting.new("use_discovery", true),
- TextSetting.new("discovery_binary", ""),
+ ToggleSetting.new("use_discover", true),
+ TextSetting.new("discover_binary", ""),
])
])
diff --git a/locale/de.ini b/locale/de.ini
index 38184725..e8c0c3a1 100644
--- a/locale/de.ini
+++ b/locale/de.ini
@@ -164,9 +164,9 @@ c.settings.input.zoom_out_discrete=Hinauszoomen (diskret)
c.settings.input.zoom_out=Hinauszoomen
c.settings.input=Steuerung
c.settings.online = Online
-c.settings.online.discovery_binary = mDNS-Discovery-Programmpfad
+c.settings.online.discover_binary = mDNS-Discovery-Programmpfad
c.settings.online.registry_url = Verzeichnis-URL
-c.settings.online.use_discovery = mDNS Discovery verwenden
+c.settings.online.use_discover = mDNS Discovery verwenden
c.settings.online.use_registry = Globales Serververzeichnis verwenden
c.settings.other.server_binary.placeholder=Pfad eingeben
c.settings.other.server_binary=Pfad zum Server (leer lassen, um PATH zu durchsuchen)
diff --git a/locale/el.ini b/locale/el.ini
index 6ffa4b4f..099b1ef9 100644
--- a/locale/el.ini
+++ b/locale/el.ini
@@ -191,8 +191,8 @@ c.settings.input.scroll_up = Σκρολάρισμα προς τα πάνω
c.settings.input.zoom_in_discrete = Ζουμάρισμα (σιγά σιγά)
c.settings.online.use_registry = Χρήση παγκοσμίου μητρώου server
c.settings.ui.language.system = Προεπιλογή συστήματος
-c.settings.online.discovery_binary = Τοποθεσία προγράμματος mDNS discovery
-c.settings.online.use_discovery = Χρήση mDNS discovery
+c.settings.online.discover_binary = Τοποθεσία προγράμματος mDNS discovery
+c.settings.online.use_discover = Χρήση mDNS discovery
c.settings.server.mdns = Αναζήτηση τοπικών server
c.settings.server.register = Υποβολή στο μητρώο (απαιτείται port forwarding)
c.settings.ui.scale_mode.resize = Αλλαγή μεγέθους
diff --git a/locale/en.ini b/locale/en.ini
index 63b92e13..fe4b149b 100644
--- a/locale/en.ini
+++ b/locale/en.ini
@@ -176,9 +176,9 @@ c.settings.input.zoom_in=Zoom in
c.settings.input.zoom_out_discrete=Zoom out (discrete)
c.settings.input.zoom_out=Zoom out
c.settings.input=Controls
-c.settings.online.discovery_binary=mDNS discovery binary path
+c.settings.online.discover_binary=mDNS discovery binary path
c.settings.online.registry_url=Registry URL
-c.settings.online.use_discovery=Use mDNS discovery
+c.settings.online.use_discover=Use mDNS discovery
c.settings.online.use_registry=Use global server registry
c.settings.online=Online
c.settings.server.binary_path=Server binary path
diff --git a/locale/es.ini b/locale/es.ini
index 715db4aa..0bf2c0b8 100644
--- a/locale/es.ini
+++ b/locale/es.ini
@@ -160,9 +160,9 @@ c.settings.input.zoom_out_discrete=Reducir (discreto)
c.settings.input.zoom_out=Reducir
c.settings.input=Controles
c.settings.online = En línea
-c.settings.online.discovery_binary = Ruta binaria de detección mDNS
+c.settings.online.discover_binary = Ruta binaria de detección mDNS
c.settings.online.registry_url = URL del registro
-c.settings.online.use_discovery = Utilizar la detección mDNS
+c.settings.online.use_discover = Utilizar la detección mDNS
c.settings.online.use_registry = Utilizar el registro global del servidor
c.settings.other.server_binary.placeholder=Pone ruta
c.settings.other.server_binary=Binario del servidor (deja vacío para buscar RUTA)
diff --git a/locale/eu.ini b/locale/eu.ini
index 33c849e9..29ad37a2 100644
--- a/locale/eu.ini
+++ b/locale/eu.ini
@@ -158,9 +158,9 @@ c.settings.input.zoom_out_discrete=Txikiagotu (diskretua)
c.settings.input.zoom_out=Txikiagotu
c.settings.input=Kontrolak
c.settings.online = Online
-c.settings.online.discovery_binary = mDNS arakatzailearen exekutagarri bidea
+c.settings.online.discover_binary = mDNS arakatzailearen exekutagarri bidea
c.settings.online.registry_url = Erregistratu URLa
-c.settings.online.use_discovery = Erabili mDNS arakatzailea
+c.settings.online.use_discover = Erabili mDNS arakatzailea
c.settings.online.use_registry = Erabili zerbitzarien erregistro orokorra
c.settings.other.server_binary.placeholder=Sartu bidea
c.settings.other.server_binary=Zerbitzari exekutagarria (hutsik utzi PATH-en bilatzeko)
diff --git a/locale/fi.ini b/locale/fi.ini
index dd4c4371..f167cba5 100644
--- a/locale/fi.ini
+++ b/locale/fi.ini
@@ -229,10 +229,10 @@ s.tutorial.interact_empty = Ole vuorovaikutuksessa tyhjän laskurin kanssa
s.state.overflow_resubscribe = Jäljelle jääminen. Jotkut asiakkaalle sidotut paketit pudotettiin.
s.tutorial.active_cuttingboard = Leikkaa tuote viipaleiksi tästä
s.tutorial.error = Opetusohjelmakoodi ei vielä pysty käsittelemään tätä reseptiä.
-c.settings.online.discovery_binary = mDNS-löydön binaaripolku
+c.settings.online.discover_binary = mDNS-löydön binaaripolku
c.settings.online.registry_url = Rekisterin URL-osoite
c.settings.server.name = Palvelimen näyttönimi
-c.settings.online.use_discovery = Käytä mDNS-löytöä
+c.settings.online.use_discover = Käytä mDNS-löytöä
c.settings.online.use_registry = Käytä laajamittaista palvelinrekisteriä
c.settings.online = Verkossa
c.settings.server.mdns = Paikallisen palvelimen löydettävyys
diff --git a/locale/fr.ini b/locale/fr.ini
index 6f970aaf..b1419144 100644
--- a/locale/fr.ini
+++ b/locale/fr.ini
@@ -186,7 +186,7 @@ c.menu.play.fetching_list = Recherche de la liste en cours…
c.menu.play.list_item = {0} ({1} personnes)
c.menu.deny = Refuser
c.menu.play.server_binary_not_found = Binaire serveur introuvable. Veuillez installer le serveur séparément.
-c.settings.online.use_discovery = Utiliser la découverte mDNS
+c.settings.online.use_discover = Utiliser la découverte mDNS
c.settings.online.use_registry = Utiliser le registre global du serveur
s.tutorial.interact_plate = Ajoutez l'article à cette assiette
s.error.algo_not_found = L'algorithme « {0} » n'existe pas.
@@ -268,7 +268,7 @@ c.settings.server = Serveur
c.settings.gameplay.first_person = Activer le mode à la première personne (réduit la jouabilité)
c.settings.server.binary_path = Chemin binaire du serveur
c.settings.server.data_path = Chemin du répertoire de données du serveur
-c.settings.online.discovery_binary = Chemin binaire de découverte mDNS
+c.settings.online.discover_binary = Chemin binaire de découverte mDNS
c.settings.online.registry_url = URL du registre
c.menu.play.server_failed_tooltip = Le serveur est tombé en panne ou s'est arrêté d'une manière ou d'une autre.%nVous devriez essayer de démarrer le serveur à partir de la ligne de commande.
c.menu.play.server_failed = Serveur (erreur)
diff --git a/locale/it.ini b/locale/it.ini
index 736dc646..763c7463 100644
--- a/locale/it.ini
+++ b/locale/it.ini
@@ -178,7 +178,7 @@ c.settings.server.name = Nome del server
c.setup.frank_signature = F. Miller
c.settings.username = Nome utente
c.setup.name = 1. [b]Nome del Lavoratore[/b] Per favore inserisci il tuo nome. Gli altri cuochi potranno vedere il tuo nome sul tuo cartellino.
-c.settings.online.use_discovery = Usa individuazione mDNS
+c.settings.online.use_discover = Usa individuazione mDNS
c.settings.online.registry_url = URL del registro
c.settings.online = Online
c.setup.compensation.salary.prefix = Lo stipendio è
diff --git a/locale/ja.ini b/locale/ja.ini
index c4896d98..704004e5 100644
--- a/locale/ja.ini
+++ b/locale/ja.ini
@@ -211,7 +211,7 @@ c.menu.play.server_testing = サーバー(テスト)
c.menu.play.server_unavailable = サーバー(利用不可)
c.settings.graphics.gi.disabled = 無効
c.menu.play.server_binary_not_found = サーバーのバイナリが見つかりませんでした。サーバーは別途設置してください。
-c.settings.online.use_discovery = mDNS検出を使用する
+c.settings.online.use_discover = mDNS検出を使用する
c.settings.online.use_registry = グローバルサーバーレジストリを使用する
c.settings.online = オンライン
c.error.select_hairstyle = 髪型を選ばなければなりません。
@@ -274,5 +274,5 @@ c.settings.server = サーバ
s.campaign.list_helper = - {0}%n - {1}
s.error.no_player = プレーヤーが存在しません。
s.tutorial.serve = ここで食事を出します
-c.settings.online.discovery_binary = mDNS 検出バイナリ パス
+c.settings.online.discover_binary = mDNS 検出バイナリ パス
c.settings.online.registry_url = レジストリ URL
diff --git a/locale/nl.ini b/locale/nl.ini
index d1e8d543..196317f6 100644
--- a/locale/nl.ini
+++ b/locale/nl.ini
@@ -157,9 +157,9 @@ c.settings.input.zoom_in_discrete = Inzoomen (onopvallend)
c.settings.input.zoom_out = Uitzoomen
c.settings.input.zoom_out_discrete = Uitzoomen (onopvallend)
c.settings.online = Online
-c.settings.online.discovery_binary = Uitvoerbaar bestand van mDNS-discovery
+c.settings.online.discover_binary = Uitvoerbaar bestand van mDNS-discovery
c.settings.online.registry_url = Register-url
-c.settings.online.use_discovery = mDNS-discovery gebruiken
+c.settings.online.use_discover = mDNS-discovery gebruiken
c.settings.online.use_registry = Globaal serverregister gebruiken
c.settings.other = Anders
c.settings.other.server_binary = Serverbestand (laat leeg om PATH te doorzoeken)
diff --git a/locale/ru.ini b/locale/ru.ini
index 93e64f04..bb435739 100644
--- a/locale/ru.ini
+++ b/locale/ru.ini
@@ -153,7 +153,7 @@ c.settings.input.scroll_down_discrete = Прокрутить вниз (диск
c.settings.input.scroll_down = Прокрутить вниз
c.settings.input.scroll_up_discrete = Прокрутить вверх (дискретно)
c.settings.input.scroll_up = Прокрутить вверх
-c.settings.online.discovery_binary = Путь к исполняемому файлу обнаружения mDNS
+c.settings.online.discover_binary = Путь к исполняемому файлу обнаружения mDNS
c.setup.additional_terms = 6. [b]Дополнительные условия.[/b] Не создавать дубликаты тарелок. (Это [u]НЕВОЗМОЖНО[/u]!)
s.error.customer_interact = Вы не имеете права донимать клиентов.
s.error.item_not_found = Предмет "{0}" не существует.
@@ -223,7 +223,7 @@ c.settings.graphics.gi = Глобальное освещение
c.settings.input.joypad = {0} (Джойстик)
c.settings.input.other_event = Другое событие
c.settings.online.registry_url = URL Регистра
-c.settings.online.use_discovery = Использовать обнаружение mDNS
+c.settings.online.use_discover = Использовать обнаружение mDNS
c.settings.online = В сети
c.settings.server.mdns = Обнаружение локальных серверов
c.settings.server = Сервер
diff --git a/locale/tr.ini b/locale/tr.ini
index ecd9a82f..6edeb73e 100644
--- a/locale/tr.ini
+++ b/locale/tr.ini
@@ -82,9 +82,9 @@ c.menu.play = Oyna
c.score.time_remaining = Kalan zaman
c.settings.online.use_registry = Küresel sunucu kaydını kullan
c.settings.online = Çevrimiçi
-c.settings.online.discovery_binary = mDNS keşif binary yolu
+c.settings.online.discover_binary = mDNS keşif binary yolu
c.settings.online.registry_url = Kayıt URL'si
-c.settings.online.use_discovery = mDNS keşfini kullan
+c.settings.online.use_discover = mDNS keşfini kullan
c.settings.gameplay.vibration = Titreşimleri etkinleştir
c.settings.gameplay = Oynanış
c.settings.graphics.aa = Kenar Yumuşatma
diff --git a/locale/zh_Hans.ini b/locale/zh_Hans.ini
index 4688c84b..5108ee8e 100644
--- a/locale/zh_Hans.ini
+++ b/locale/zh_Hans.ini
@@ -165,9 +165,9 @@ c.settings.input.zoom_out_discrete=缩小(离散)
c.settings.input.zoom_out=缩小
c.settings.input=限定
c.settings.online = 在线
-c.settings.online.discovery_binary = mDNS 发现二进制文件路径
+c.settings.online.discover_binary = mDNS 发现二进制文件路径
c.settings.online.registry_url = 注册表 URL
-c.settings.online.use_discovery = 使用 mDNS 发现
+c.settings.online.use_discover = 使用 mDNS 发现
c.settings.online.use_registry = 使用全局服务器注册表
c.settings.other.server_binary.placeholder=输入路径
c.settings.other.server_binary=服务器二进制文件(留空以搜索路径)
diff --git a/locale/zh_Hant.ini b/locale/zh_Hant.ini
index c245f21c..eba0beac 100644
--- a/locale/zh_Hant.ini
+++ b/locale/zh_Hant.ini
@@ -159,7 +159,7 @@ c.settings.input.zoom_out=縮小
c.settings.input=控制
c.settings.online = 在線
c.settings.online.registry_url = 註冊表網址
-c.settings.online.use_discovery = 使用 mDNS 探索
+c.settings.online.use_discover = 使用 mDNS 探索
c.settings.online.use_registry = 使用全域伺服器註冊表
c.settings.other.server_binary.placeholder=輸入路徑
c.settings.other.server_binary=伺服器二進制檔案(留空以搜尋 PATH)