class_name HttpTransport extends RefCounted ## Sends HTTP requests for [code]MusicServerClient[/code] using [HTTPRequest] nodes. ## ## Tests subclass this to answer requests without a network connection. ## Seconds before a request is given up and reported as failed. This covers the whole ## download, so it is generous enough for long songs on a slow connection. var timeout_seconds: float = 120.0 var _owner: Node func _init(owner: Node) -> void: _owner = owner ## Requests [param url] and calls [param on_complete] with ## [code](response_code: int, body: PackedByteArray)[/code]. Connection errors and ## timeouts are reported with response code 0. func request(url: String, method: int, on_complete: Callable) -> void: var http_request: HTTPRequest = HTTPRequest.new() http_request.timeout = timeout_seconds _owner.add_child(http_request) http_request.request_completed.connect( func( result: int, response_code: int, _headers: PackedStringArray, body: PackedByteArray, ) -> void: http_request.queue_free() on_complete.call(response_code if result == HTTPRequest.RESULT_SUCCESS else 0, body) ) var headers: PackedStringArray = [] if method == HTTPClient.METHOD_PUT: headers.append("Content-Type: application/json") var error: int = http_request.request(url, headers, method) if error != OK: http_request.queue_free() push_error("Could not send request to %s (error %d)" % [url, error]) on_complete.call(0, PackedByteArray())