extends Node ## Transport boundary: gameplay and operator code only exchange command/state dictionaries. var url := "http://127.0.0.1:8766" var token := "" func configure(role: String) -> void: var config := ConfigFile.new() config.load("user://arcade_network.cfg") url = str(config.get_value("network", "url", url)).trim_suffix("/") token = str(config.get_value("network", role + "_token", "")) if OS.has_environment("ARCADE_ROOM_URL"): url = OS.get_environment("ARCADE_ROOM_URL").trim_suffix("/") var name := "ARCADE_%s_TOKEN" % role.to_upper() if OS.has_environment(name): token = OS.get_environment(name) func post(path: String, payload: Dictionary = {}) -> Dictionary: if token.is_empty(): return {"error": "Room connection token is not configured"} var request := HTTPRequest.new() request.timeout = 2.0 add_child(request) var error := request.request(url + path, ["Content-Type: application/json", "Authorization: Bearer " + token], HTTPClient.METHOD_POST, JSON.stringify(payload)) var result: Dictionary = {"error": "Room controller is unreachable"} if error == OK: var response: Array = await request.request_completed var body = JSON.parse_string(response[3].get_string_from_utf8()) if response[0] == HTTPRequest.RESULT_SUCCESS and body is Dictionary: result = body request.queue_free() return result