add support for websockets with messages to network tab
This commit is contained in:
@@ -42,6 +42,27 @@ var response_body_bytes: PackedByteArray = []
|
||||
var mime_type: String = ""
|
||||
var is_from_lua: bool = false
|
||||
|
||||
var websocket_id: String = ""
|
||||
var websocket_event_type: String = "" # "connection", "close", "error"
|
||||
var connection_status: String = "" # "connecting", "open", "closing", "closed"
|
||||
var websocket_messages: Array[WebSocketMessage] = []
|
||||
|
||||
class WebSocketMessage:
|
||||
var timestamp: float
|
||||
var direction: String # "sent" or "received"
|
||||
var content: String
|
||||
var size: int
|
||||
|
||||
func _init(dir: String, msg: String):
|
||||
timestamp = Time.get_ticks_msec()
|
||||
direction = dir
|
||||
content = msg
|
||||
size = msg.length()
|
||||
|
||||
func get_formatted_time() -> String:
|
||||
var time_obj = Time.get_datetime_dict_from_unix_time(timestamp / 1000.0)
|
||||
return "%02d:%02d:%02d.%03d" % [time_obj.hour, time_obj.minute, time_obj.second, int(timestamp) % 1000]
|
||||
|
||||
func _init(request_url: String = "", request_method: String = "GET"):
|
||||
id = generate_id()
|
||||
url = request_url
|
||||
@@ -62,6 +83,20 @@ func generate_id() -> String:
|
||||
func extract_name_from_url(request_url: String) -> String:
|
||||
if request_url.is_empty():
|
||||
return "Unknown"
|
||||
|
||||
if request_url.begins_with("ws://") or request_url.begins_with("wss://"):
|
||||
if not websocket_event_type.is_empty():
|
||||
match websocket_event_type:
|
||||
"connection":
|
||||
var message_count = websocket_messages.size()
|
||||
if message_count > 0:
|
||||
return "WebSocket (" + str(message_count) + " messages)"
|
||||
else:
|
||||
return "WebSocket Connection"
|
||||
"close":
|
||||
return "WebSocket Close"
|
||||
"error":
|
||||
return "WebSocket Error"
|
||||
|
||||
var parts = request_url.split("/")
|
||||
if parts.size() > 0:
|
||||
@@ -175,9 +210,9 @@ static func format_bytes(given_size: int) -> String:
|
||||
if given_size < 1024:
|
||||
return str(given_size) + " B"
|
||||
elif given_size < 1024 * 1024:
|
||||
return str(given_size / 1024) + " KB"
|
||||
return str(given_size / 1024.0) + " KB"
|
||||
else:
|
||||
return str(given_size / (1024 * 1024)) + " MB"
|
||||
return str(given_size / (1024.0 * 1024.0)) + " MB"
|
||||
|
||||
func get_time_display() -> String:
|
||||
if status == RequestStatus.PENDING:
|
||||
@@ -205,3 +240,42 @@ func get_icon_texture() -> Texture2D:
|
||||
return load("res://Assets/Icons/arrow-down-up.svg")
|
||||
_:
|
||||
return load("res://Assets/Icons/search.svg")
|
||||
|
||||
static func create_websocket_connection(ws_url: String, ws_id: String) -> NetworkRequest:
|
||||
var request = NetworkRequest.new(ws_url, "WS")
|
||||
request.type = RequestType.SOCKET
|
||||
request.websocket_id = ws_id
|
||||
request.websocket_event_type = "connection"
|
||||
request.connection_status = "connecting"
|
||||
request.is_from_lua = true
|
||||
return request
|
||||
|
||||
func add_websocket_message(direction: String, message: String):
|
||||
var ws_message = WebSocketMessage.new(direction, message)
|
||||
websocket_messages.append(ws_message)
|
||||
|
||||
name = extract_name_from_url(url)
|
||||
|
||||
var total_message_size = 0
|
||||
for msg in websocket_messages:
|
||||
total_message_size += msg.size
|
||||
size = total_message_size
|
||||
|
||||
func update_websocket_status(new_status: String, status_code: int = 200, status_text: String = "OK"):
|
||||
connection_status = new_status
|
||||
self.status_code = status_code
|
||||
self.status_text = status_text
|
||||
|
||||
match new_status:
|
||||
"open":
|
||||
status = RequestStatus.SUCCESS
|
||||
"closed":
|
||||
if status_code >= 1000 and status_code < 1100:
|
||||
status = RequestStatus.SUCCESS
|
||||
else:
|
||||
status = RequestStatus.ERROR
|
||||
"error":
|
||||
status = RequestStatus.ERROR
|
||||
|
||||
end_time = Time.get_ticks_msec()
|
||||
time_ms = end_time - start_time
|
||||
|
||||
Reference in New Issue
Block a user