network tab
This commit is contained in:
124
flumi/Scripts/NetworkManager.gd
Normal file
124
flumi/Scripts/NetworkManager.gd
Normal file
@@ -0,0 +1,124 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user