diff options
author | metamuffin <metamuffin@disroot.org> | 2025-07-07 19:42:57 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-07-07 19:42:57 +0200 |
commit | c5e2de764bb1ce1d38726b80636c3fa45b06c05e (patch) | |
tree | 7606abe3b47d123abb9cafe9c1bb7920aa3d3c7f | |
parent | 9be9937f75c2711d5d7fd9759ed615397fff5c7f (diff) | |
download | hurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar hurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar.bz2 hurrycurry-c5e2de764bb1ce1d38726b80636c3fa45b06c05e.tar.zst |
implement discover tool as service.gd class
-rw-r--r-- | client/menu/play.gd | 1 | ||||
-rw-r--r-- | client/project.godot | 1 | ||||
-rw-r--r-- | client/server_list.gd | 48 | ||||
-rw-r--r-- | client/service/discover.gd | 31 | ||||
-rw-r--r-- | client/service/discover.gd.uid | 1 | ||||
-rw-r--r-- | client/service/service.gd | 8 | ||||
-rw-r--r-- | client/settings.gd | 4 | ||||
-rw-r--r-- | locale/de.ini | 4 | ||||
-rw-r--r-- | locale/el.ini | 4 | ||||
-rw-r--r-- | locale/en.ini | 4 | ||||
-rw-r--r-- | locale/es.ini | 4 | ||||
-rw-r--r-- | locale/eu.ini | 4 | ||||
-rw-r--r-- | locale/fi.ini | 4 | ||||
-rw-r--r-- | locale/fr.ini | 4 | ||||
-rw-r--r-- | locale/it.ini | 2 | ||||
-rw-r--r-- | locale/ja.ini | 4 | ||||
-rw-r--r-- | locale/nl.ini | 4 | ||||
-rw-r--r-- | locale/ru.ini | 4 | ||||
-rw-r--r-- | locale/tr.ini | 4 | ||||
-rw-r--r-- | locale/zh_Hans.ini | 4 | ||||
-rw-r--r-- | locale/zh_Hant.ini | 2 |
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) |