extends Node signal request_started(request: NetworkRequest) signal request_completed(request: NetworkRequest) signal request_failed(request: NetworkRequest) var active_requests: Dictionary = {} # request_id -> NetworkRequest var all_requests: Array[NetworkRequest] = [] var dev_tools_network_tab: NetworkTab = null func register_dev_tools_network_tab(network_tab: NetworkTab): dev_tools_network_tab = network_tab func start_request(url: String, method: String = "GET", is_from_lua: bool = false) -> NetworkRequest: var request = NetworkRequest.new(url, method) request.is_from_lua = is_from_lua active_requests[request.id] = request all_requests.append(request) # Notify dev tools if dev_tools_network_tab: dev_tools_network_tab.add_network_request(request) request_started.emit(request) return request func complete_request(request_id: String, status_code: int, status_text: String, headers: Dictionary, body: String, body_bytes: PackedByteArray = []): var request = active_requests.get(request_id) if not request: return request.set_response(status_code, status_text, headers, body, body_bytes) active_requests.erase(request_id) # Update dev tools UI if dev_tools_network_tab: dev_tools_network_tab.update_request_item(request) if request.status == NetworkRequest.RequestStatus.SUCCESS: request_completed.emit(request) else: request_failed.emit(request) func fail_request(request_id: String, error_message: String): var request = active_requests.get(request_id) if not request: return request.set_error(error_message) active_requests.erase(request_id) # Update dev tools UI if dev_tools_network_tab: dev_tools_network_tab.update_request_item(request) request_failed.emit(request) func set_request_headers(request_id: String, headers: Dictionary): var request = active_requests.get(request_id) if request: request.request_headers = headers func set_request_body(request_id: String, body: String): var request = active_requests.get(request_id) if request: request.request_body = body func get_all_requests() -> Array[NetworkRequest]: return all_requests func clear_all_requests(): active_requests.clear() all_requests.clear() if dev_tools_network_tab: dev_tools_network_tab.clear_all_requests() func clear_all_requests_except(preserve_request_id: String): # Remove from active_requests but preserve specific request var preserved_active = null if active_requests.has(preserve_request_id): preserved_active = active_requests[preserve_request_id] active_requests.clear() if preserved_active: active_requests[preserve_request_id] = preserved_active # Remove from all_requests but preserve specific request var preserved_request = null for request in all_requests: if request.id == preserve_request_id: preserved_request = request break all_requests.clear() if preserved_request: all_requests.append(preserved_request) if dev_tools_network_tab: dev_tools_network_tab.clear_all_requests_except(preserve_request_id) func get_request_stats() -> Dictionary: var total_requests = all_requests.size() var total_size = 0 var successful_requests = 0 var failed_requests = 0 var pending_requests = active_requests.size() for request in all_requests: total_size += request.size match request.status: NetworkRequest.RequestStatus.SUCCESS: successful_requests += 1 NetworkRequest.RequestStatus.ERROR: failed_requests += 1 return { "total": total_requests, "successful": successful_requests, "failed": failed_requests, "pending": pending_requests, "total_size": total_size }