58 lines
1.7 KiB
GDScript
58 lines
1.7 KiB
GDScript
extends Control
|
|
|
|
@onready var clients: Tree = %Clients
|
|
|
|
## Key: BufferedHTTPClient | value: TreeItem
|
|
var client_map : Dictionary[BufferedHTTPClient, TreeItem] = {}
|
|
## Key: RequestData | value: TreeItem
|
|
var request_map : Dictionary[BufferedHTTPClient.RequestData, TreeItem] = {}
|
|
|
|
|
|
func _ready() -> void:
|
|
get_tree().root.child_entered_tree.connect(_on_child_enter)
|
|
_add_http_clients(get_tree().root)
|
|
|
|
|
|
func _add_http_clients(parent: Node) -> void:
|
|
for child in parent.get_children():
|
|
_on_child_enter(child)
|
|
_add_http_clients(child)
|
|
|
|
|
|
func _on_child_enter(node: Node) -> void:
|
|
if node is BufferedHTTPClient:
|
|
_new_client(node)
|
|
|
|
|
|
func _new_client(client: BufferedHTTPClient):
|
|
var parent = clients.create_item()
|
|
parent.set_text(0, client.name)
|
|
|
|
client_map[client] = parent
|
|
|
|
client.request_added.connect(_on_add_request.bind(parent))
|
|
client.request_done.connect(_on_done_request)
|
|
for request in client.requests:
|
|
_on_add_request(request, parent)
|
|
|
|
|
|
func _on_add_request(request: BufferedHTTPClient.RequestData, http_item: TreeItem):
|
|
var request_item = clients.create_item(http_item)
|
|
request_item.set_text(0, request.path)
|
|
request_item.set_text(1, "Queued")
|
|
request_map[request] = request_item
|
|
|
|
|
|
func _on_done_request(response: BufferedHTTPClient.ResponseData):
|
|
var request_item = request_map[response.request_data] as TreeItem
|
|
request_item.set_text(1, "DONE")
|
|
await get_tree().create_timer(60, true, false, true).timeout
|
|
if request_item != null: request_item.free()
|
|
|
|
|
|
func _close_client(client: BufferedHTTPClient):
|
|
var http_item = client_map[client] as TreeItem
|
|
client_map.erase(client)
|
|
http_item.set_text(1, "CLOSED")
|
|
await get_tree().create_timer(60, true, false, true).timeout
|
|
http_item.free()
|