diff options
Diffstat (limited to 'client/server_list.gd')
-rw-r--r-- | client/server_list.gd | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/client/server_list.gd b/client/server_list.gd new file mode 100644 index 00000000..f509a34e --- /dev/null +++ b/client/server_list.gd @@ -0,0 +1,49 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 tpart +# +# 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/>. +# +extends Node + +signal update_loading(status: bool) +signal update_server_list(list: Array) + +var current_list := [] +var loading := false + +@onready var req: HTTPRequest = $HTTPRequest + +func fetch_server_list(): + if loading: + push_warning("Server list is already loading") + return + loading = true + update_loading.emit(true) + req.request_completed.connect(_on_request_completed) + req.request("https://hurrycurry-registry.metamuffin.org/v1/list", [ + "Accept: application/json", + "User-Agent: Hurry Curry! %s" % Global.VERSION + ]) + +func _on_request_completed(result: int, _response_code: int, _headers: PackedStringArray, body: PackedByteArray): + loading = false + update_loading.emit(false) + if result != 0: + push_warning("Fetching server list failed with code %d" % result) + return + var json = JSON.parse_string(body.get_string_from_utf8()) + if json == null: + push_error("Server list response invalid") + return + current_list = json + update_server_list.emit(json) |