generated from krampus/template-godot4
146 lines
3.8 KiB
GDScript
146 lines
3.8 KiB
GDScript
class_name EditorTubeLocalSignalingControl extends Control
|
|
## @experimental: This class is used as part of the TubeClientDebugPanel scene and is part of a scene. Should not be used as itself.
|
|
|
|
|
|
const MESSAGE_ITEM_CONTROL_SCENE := preload("uid://cfsei3airwx4s")
|
|
|
|
|
|
@export var messages_container: EditorTubeMessagesContainer
|
|
@export var max_messages_amount: int = 100
|
|
|
|
|
|
var local_signaling_peer: TubeLocalSignalingPeer:
|
|
set(x):
|
|
|
|
if null != local_signaling_peer:
|
|
local_signaling_peer.warning_raised.disconnect(
|
|
_on_local_signaling_peer_warning_raised
|
|
)
|
|
local_signaling_peer.data_sent.disconnect(
|
|
_on_local_signaling_peer_data_sent
|
|
)
|
|
local_signaling_peer.received_data.disconnect(
|
|
_on_local_signaling_peer_data_received
|
|
)
|
|
|
|
if null != x:
|
|
x.warning_raised.connect(
|
|
_on_local_signaling_peer_warning_raised
|
|
)
|
|
x.data_sent.connect(
|
|
_on_local_signaling_peer_data_sent
|
|
)
|
|
x.received_data.connect(
|
|
_on_local_signaling_peer_data_received
|
|
)
|
|
|
|
local_signaling_peer = x
|
|
update()
|
|
|
|
|
|
var message_item_controls: Array[EditorTubeMessagesItemControl] = []
|
|
var message_item_button_group := ButtonGroup.new()
|
|
|
|
@onready var name_label: Label = %NameLabel
|
|
#@onready var state_indicator: Control = %StateIndicator
|
|
|
|
|
|
func _ready() -> void:
|
|
message_item_button_group.allow_unpress = true
|
|
update()
|
|
|
|
|
|
func update():
|
|
if is_instance_valid(local_signaling_peer):
|
|
|
|
if is_instance_valid(name_label):
|
|
name_label.text = str(local_signaling_peer.udp_peer.get_local_port())
|
|
|
|
if is_instance_valid(messages_container):
|
|
if messages_container.is_displaying_from(self):
|
|
messages_container.display_messages(
|
|
message_item_controls,
|
|
self
|
|
)
|
|
|
|
else:
|
|
if is_instance_valid(name_label):
|
|
name_label.text = "Unset"
|
|
|
|
|
|
func add_message_item_control(data) -> EditorTubeMessagesItemControl:
|
|
if max_messages_amount <= message_item_controls.size():
|
|
var item := message_item_controls.pop_front()
|
|
item.queue_free()
|
|
|
|
var message_item_control:= MESSAGE_ITEM_CONTROL_SCENE.instantiate()
|
|
message_item_controls.append(message_item_control)
|
|
message_item_control.data = data
|
|
message_item_control.button_group = message_item_button_group
|
|
return message_item_control
|
|
|
|
|
|
func _on_local_signaling_peer_warning_raised(message: String):
|
|
add_message_item_control(message).warning()
|
|
update()
|
|
|
|
|
|
#func _on_local_signaling_peer_connected():
|
|
#add_message_item_control("Connected").success()
|
|
#update()
|
|
|
|
|
|
#func _on_local_signaling_peer_failed():
|
|
#add_message_item_control(
|
|
#"Connection failed: {error}".format({
|
|
#"error": local_signaling_peer.error_message
|
|
#})
|
|
#).error()
|
|
#update()
|
|
#
|
|
#
|
|
#func _on_local_signaling_peer_disconnected():
|
|
#add_message_item_control("Disconneted")
|
|
#update()
|
|
#
|
|
#
|
|
#func _on_local_signaling_peer_state_changed():
|
|
##if WebSocketPeer.STATE_OPEN == local_signaling_peer.state:
|
|
##add_message_item_control("Connection open")
|
|
#
|
|
#if WebSocketPeer.STATE_CLOSING == local_signaling_peer.state:
|
|
#add_message_item_control("Connection closing")
|
|
#
|
|
##elif WebSocketPeer.STATE_CLOSED == local_signaling_peer.state:
|
|
##add_message_item_control("Connection closed")
|
|
#
|
|
#update()
|
|
|
|
|
|
func _on_local_signaling_peer_data_received(data: Variant, address: String, port: int):
|
|
var control := add_message_item_control(data)
|
|
control.received()
|
|
control.from_address = address
|
|
control.from_id = port
|
|
update()
|
|
|
|
|
|
func _on_local_signaling_peer_data_sent(data: Dictionary, address: String, port: int):
|
|
var control := add_message_item_control(data)
|
|
control.sent()
|
|
control.from_address = address
|
|
control.from_id = port
|
|
update()
|
|
|
|
|
|
func _on_visibility_changed() -> void:
|
|
if not is_visible_in_tree():
|
|
return
|
|
|
|
if is_instance_valid(messages_container):
|
|
if not messages_container.is_displaying_from(self):
|
|
messages_container.display_messages(
|
|
message_item_controls,
|
|
self
|
|
)
|