You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
81 lines
2.5 KiB
extends HTTPRequest
|
|
|
|
const Response = preload("res://scenes/util/Response.gd")
|
|
|
|
var _callback : Callable
|
|
var auth_token: String
|
|
var base_address: String
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
pass # Replace with function body.
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
pass
|
|
|
|
|
|
func post_http_request(url: String, request_data: String) -> Response:
|
|
return await _send_http_request_sync(url, HTTPClient.METHOD_POST, request_data)
|
|
|
|
func patch_http_request(url: String, request_data: String) -> Response:
|
|
return await _send_http_request_sync(url, HTTPClient.METHOD_PATCH, request_data)
|
|
|
|
func get_http_request(url: String, callback : Callable) -> bool:
|
|
return _send_http_request(url, HTTPClient.METHOD_GET, callback)
|
|
|
|
func get_http_request_sync(url: String) -> Response:
|
|
return await _send_http_request_sync(url, HTTPClient.METHOD_GET)
|
|
|
|
func _send_http_request_sync(url: String, method: HTTPClient.Method, request_data: String = "") -> Response:
|
|
var result: Response = Response.new()
|
|
result.status = FAILED
|
|
result.code = HTTPClient.ResponseCode.RESPONSE_BAD_REQUEST
|
|
result.data = {}
|
|
|
|
var lambda = func(response):
|
|
result.status = response.status
|
|
result.code = response.code
|
|
result.data = response.data
|
|
|
|
if !_send_http_request(url, method, lambda, request_data):
|
|
return result
|
|
|
|
await request_completed
|
|
return result
|
|
|
|
func _send_http_request(url: String, method: HTTPClient.Method, callback : Callable, request_data : String = "") -> bool:
|
|
_callback = callback
|
|
|
|
var _url = "{address}/{url}".format({"address": base_address, "url": url})
|
|
|
|
print_debug("%s request on %s with: %s" % [method, _url, request_data])
|
|
|
|
var headers = ["X-AUTH-TOKEN: %s" % auth_token, "accept: application/json"]
|
|
if method == HTTPClient.METHOD_PATCH:
|
|
headers.append("Content-Type: application/merge-patch+json")
|
|
elif method == HTTPClient.METHOD_POST:
|
|
headers.append("Content-Type: application/json")
|
|
|
|
var error = request(_url, headers, method, request_data)
|
|
|
|
return error == OK
|
|
|
|
func _on_request_completed(result, response_code, headers, body):
|
|
var response : Response = Response.new()
|
|
response.status = FAILED
|
|
response.code = response_code
|
|
response.data = {}
|
|
|
|
## Where to get the response to?
|
|
if result == HTTPRequest.RESULT_SUCCESS and response_code / 100 == 2:
|
|
response.status = OK
|
|
var json = JSON.new()
|
|
json.parse(body.get_string_from_utf8())
|
|
response.data = json.get_data()
|
|
else:
|
|
print_debug("%s: %s" % [result, response_code])
|
|
|
|
_callback.call(response)
|