diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-02-15 12:35:53 +0100 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-02-15 12:35:53 +0100 |
commit | 0d17544b3e3220a7493319271b79ce435f991a0b (patch) | |
tree | 77800833fb9074ecb717b1ac5af3433eb744a55b /Game/Lobby/games_lobby.gd | |
parent | 5b35174ffab42f0331f1a6527ef6bbab7a3dbdcb (diff) |
next commit
Diffstat (limited to 'Game/Lobby/games_lobby.gd')
-rw-r--r-- | Game/Lobby/games_lobby.gd | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Game/Lobby/games_lobby.gd b/Game/Lobby/games_lobby.gd new file mode 100644 index 0000000..ffc66f3 --- /dev/null +++ b/Game/Lobby/games_lobby.gd @@ -0,0 +1,90 @@ +extends Node + + +class HTTPRequestConfig extends Resource: + var headers: PackedStringArray + var method: HTTPClient.Method + var data: Dictionary + var node: HTTPRequest + + @warning_ignore("shadowed_variable") + func _init( + headers := PackedStringArray(), + method := HTTPClient.METHOD_GET, + data := {}, + node := HTTPRequest.new() + ) -> void: + self.headers = headers + self.method = method + self.data = data + self.node = node + + +class HTTPResponse extends Resource: + var result_code: HTTPRequest.Result + var response_code: int + var headers: PackedStringArray + var body: PackedByteArray + + func parse_json() -> Dictionary: + return JSON.parse_string(body.get_string_from_utf8()) + + +var server_base_url: String = Client.get_config().get_value("general", "game_lobby_server_base_url") +var current_game_id: String +var current_secret: String + + +func request( + url: String, + config: HTTPRequestConfig = HTTPRequestConfig.new() +) -> HTTPResponse: + get_tree().root.add_child(config.node) + + if config.method == HTTPClient.METHOD_POST: + config.data["id"] = current_game_id + config.data["secret"] = current_secret + + var response = HTTPResponse.new() + config.node.request_completed.connect( + func ( + result_code: int, + response_code: int, + headers: PackedStringArray, + body: PackedByteArray + ): + response.result_code = result_code + response.response_code = response_code + response.headers = headers + response.body = body + + get_tree().root.remove_child(config.node) + ) + + config.node.request( + "%s%s" % [server_base_url, url], + config.headers, + config.method, + JSON.stringify(config.data) + ) + + await config.node.request_completed + return response + + +func request_get(url: String, headers := PackedStringArray()): + var config := HTTPRequestConfig.new(headers) + + return await request(url, config) + + +func request_post(url: String, data: Dictionary = {}, headers := PackedStringArray()): + var config := HTTPRequestConfig.new(headers, HTTPClient.METHOD_POST, data) + + return await request(url, config) + + +func check_available() -> bool: + var response = await GameLobby.request_get("") + + return response.result_code == HTTPRequest.RESULT_SUCCESS |