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