2026-07-04 18:22:23 -06:00
|
|
|
# client_node.gd
|
|
|
|
|
class_name ClientNode
|
|
|
|
|
extends Node
|
|
|
|
|
|
|
|
|
|
var udp = PacketPeerUDP.new()
|
|
|
|
|
var connected = false
|
|
|
|
|
|
2026-07-06 13:57:09 -06:00
|
|
|
var fast_broadcast_rate = 0.5
|
2026-07-04 18:22:23 -06:00
|
|
|
var slow_broadcast_rate = 10.0
|
|
|
|
|
var current_broadcast_rate = fast_broadcast_rate
|
|
|
|
|
var last_broadcast = 0
|
|
|
|
|
|
|
|
|
|
var ip_address: String = ""
|
|
|
|
|
|
2026-07-04 23:49:20 -06:00
|
|
|
var thread: Thread
|
|
|
|
|
var mutex: Mutex
|
|
|
|
|
var signal_queue = []
|
|
|
|
|
var exit_thread = false
|
2026-07-06 13:57:09 -06:00
|
|
|
var use_thread = true
|
2026-07-04 23:49:20 -06:00
|
|
|
|
2026-07-04 18:22:23 -06:00
|
|
|
func _ready():
|
|
|
|
|
_try_set_ip()
|
|
|
|
|
udp.set_broadcast_enabled(true)
|
|
|
|
|
udp.set_dest_address("192.168.0.255", 5000)
|
|
|
|
|
SensorSignals.new_sensor_connected.connect(_on_sensor_connected)
|
2026-07-04 23:49:20 -06:00
|
|
|
|
2026-07-06 13:57:09 -06:00
|
|
|
use_thread = OS.get_processor_count() > 1
|
2026-07-04 23:49:20 -06:00
|
|
|
mutex = Mutex.new()
|
2026-07-06 13:57:09 -06:00
|
|
|
if use_thread:
|
|
|
|
|
thread = Thread.new()
|
|
|
|
|
print('Starting UDP Broadcast thread')
|
|
|
|
|
thread.start(_thread_function)
|
|
|
|
|
else:
|
|
|
|
|
print('UDP server running in single threaded mode')
|
2026-07-04 18:22:23 -06:00
|
|
|
|
2026-07-04 23:49:20 -06:00
|
|
|
func _process(delta: float) -> void:
|
|
|
|
|
mutex.lock()
|
2026-07-04 18:22:23 -06:00
|
|
|
last_broadcast += delta
|
2026-07-04 23:49:20 -06:00
|
|
|
mutex.unlock()
|
2026-07-06 13:57:09 -06:00
|
|
|
if not use_thread:
|
|
|
|
|
_process_broadcast()
|
2026-07-04 23:49:20 -06:00
|
|
|
|
|
|
|
|
func _exit_tree() -> void:
|
2026-07-06 13:57:09 -06:00
|
|
|
if use_thread:
|
|
|
|
|
mutex.lock()
|
|
|
|
|
exit_thread = true
|
|
|
|
|
mutex.unlock()
|
|
|
|
|
thread.wait_to_finish()
|
2026-07-04 23:49:20 -06:00
|
|
|
|
|
|
|
|
func _thread_function():
|
2026-07-06 13:57:09 -06:00
|
|
|
print('UDP Broadcast thread started')
|
2026-07-04 23:49:20 -06:00
|
|
|
while true:
|
|
|
|
|
mutex.lock()
|
|
|
|
|
var should_exit = exit_thread
|
|
|
|
|
mutex.unlock()
|
|
|
|
|
if should_exit:
|
|
|
|
|
break
|
|
|
|
|
mutex.lock()
|
|
|
|
|
var do_broadcast = last_broadcast >= current_broadcast_rate
|
|
|
|
|
mutex.unlock()
|
|
|
|
|
if do_broadcast:
|
|
|
|
|
mutex.lock()
|
|
|
|
|
last_broadcast = 0
|
|
|
|
|
mutex.unlock()
|
2026-07-06 13:57:09 -06:00
|
|
|
_process_broadcast()
|
|
|
|
|
|
|
|
|
|
func _process_broadcast():
|
|
|
|
|
if ip_address.length() == 0:
|
|
|
|
|
_try_set_ip()
|
|
|
|
|
return
|
|
|
|
|
# Try to contact server
|
|
|
|
|
var broadcast_str = ip_address + "|%s" % Time.get_datetime_string_from_system(true)
|
|
|
|
|
print('Broadcasting to UDP: ', broadcast_str)
|
|
|
|
|
udp.put_packet(broadcast_str.to_utf8_buffer())
|
2026-07-04 18:22:23 -06:00
|
|
|
|
|
|
|
|
func _try_set_ip():
|
|
|
|
|
for address in IP.get_local_addresses():
|
|
|
|
|
if address.begins_with("192"):
|
|
|
|
|
if address.ends_with("0.1"):
|
|
|
|
|
continue
|
|
|
|
|
ip_address = address
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
func _on_sensor_connected(sensor_ip, sensor_data):
|
|
|
|
|
current_broadcast_rate = slow_broadcast_rate
|