80 lines
2.3 KiB
GDScript
80 lines
2.3 KiB
GDScript
class_name UDPBroadcast
|
||
|
||
const addres_list: Dictionary = {
|
||
'ПРД-Н1': [50011, "10.1.1.11"],
|
||
'ПРД-В1': [50012, "10.1.1.12"],
|
||
'ПРД-К1': [50013, "10.1.1.13"],
|
||
'ПРД-Н2': [50021, "10.1.1.21"],
|
||
'ПРД-В2': [50022, "10.1.1.22"],
|
||
'ПРД-К2': [50023, "10.1.1.23"],
|
||
'ПРД-Н3': [50031, "10.1.1.31"],
|
||
'ПРД-В3': [50032, "10.1.1.32"],
|
||
'ПРД-К3': [50033, "10.1.1.33"],
|
||
'ПРД-Н4': [50041, "10.1.1.41"],
|
||
'ПРД-В4': [50042, "10.1.1.42"],
|
||
'ПРД-К4': [50043, "10.1.1.43"],
|
||
}
|
||
const broadcast_addr: Array = [50000, "10.1.1.255"]
|
||
#const bind_addr: Array = [50_000, "10.1.1.70"] TODO: Порт по умолчанию
|
||
var _socket: SocketUDP
|
||
var self_name: String
|
||
var _timer: Timer
|
||
|
||
|
||
func _init(name: String):
|
||
self_name = name
|
||
_socket = SocketUDP.new()
|
||
_timer = Timer.new()
|
||
_timer.wait_time = 1.0 / 3.0
|
||
_timer.timeout.connect(_on_timer_timeout)
|
||
|
||
if addres_list.has(name):
|
||
var port: int = addres_list[name][0]
|
||
var addr: String = addres_list[name][1]
|
||
bind_unit_addres(port, addr)
|
||
else:
|
||
push_error("Неизвестное устройство: %s" % name)
|
||
|
||
|
||
func bind_unit_addres(port_for_bind: int, addr_for_bind: String) -> void:
|
||
print('Привязка адреса: %s' % addr_for_bind)
|
||
var bind_result = _socket.bind(port_for_bind, addr_for_bind)
|
||
if bind_result != OK:
|
||
push_error("Не удалось привязаться к %s: %s" % [addr_for_bind, error_string(bind_result)])
|
||
|
||
|
||
func start_broadcast() -> void:
|
||
_timer.start()
|
||
|
||
|
||
func stop_broadcast() -> void:
|
||
_timer.stop()
|
||
|
||
|
||
func send_broadcast(message: String) -> bool:
|
||
_socket.set_broadcast_enabled(true)
|
||
var data: PackedByteArray = message.to_utf8_buffer()
|
||
_socket.send_to(broadcast_addr[1], broadcast_addr[0], data)
|
||
return true
|
||
|
||
|
||
func close_udp_unit() -> void:
|
||
_timer.stop()
|
||
_socket.close()
|
||
|
||
|
||
func add_timer_to_scene(parent: Node) -> void:
|
||
parent.add_child(_timer)
|
||
|
||
|
||
func _on_timer_timeout() -> void:
|
||
send_broadcast("hello")
|
||
|
||
|
||
class SocketUDP extends PacketPeerUDP:
|
||
func send_to(addr: String, port: int, data: PackedByteArray):
|
||
set_dest_address(addr, port)
|
||
var rc: = put_packet(data)
|
||
if rc != OK:
|
||
push_error('%s: %s:%s' % [error_string(rc), addr, port])
|