Доработка Для отправки УКП сообщений

This commit is contained in:
TotMaxim
2025-11-14 16:35:33 +03:00
parent c678b4a22a
commit f8fbb3bc4e
5 changed files with 1076 additions and 9 deletions

View File

@@ -19,6 +19,16 @@ const broadcast_addr: Array = [50000, "10.1.1.255"]
var _socket: SocketUDP
var self_name: String
var _timer: Timer
var sockets_status_bit: int = 0
var ukp0_data: PackedByteArray:
set(v):
ukp0_data = v
print('Произошло Обновление данных ukp0_data')
var ukp1_data: PackedByteArray:
set(v):
ukp1_data = v
print('Произошло Обновление данных ukp1_data')
func _init(name: String):
@@ -27,6 +37,10 @@ func _init(name: String):
_timer = Timer.new()
_timer.wait_time = 1.0 / 3.0
_timer.timeout.connect(_on_timer_timeout)
ukp0_data.resize(32)
ukp0_data.fill(0)
ukp1_data.resize(32)
ukp1_data.fill(0)
if addres_list.has(name):
var port: int = addres_list[name][0]
@@ -37,7 +51,6 @@ func _init(name: String):
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)])
@@ -51,9 +64,10 @@ func stop_broadcast() -> void:
_timer.stop()
func send_broadcast(message: String) -> bool:
func send_broadcast() -> bool:
_socket.set_broadcast_enabled(true)
var data: PackedByteArray = message.to_utf8_buffer()
var data: PackedByteArray = _form_status_packet()
# добавление 11 байтов вперед вохоже
_socket.send_to(broadcast_addr[1], broadcast_addr[0], data)
return true
@@ -67,10 +81,60 @@ func add_timer_to_scene(parent: Node) -> void:
parent.add_child(_timer)
func poll_receive() -> void:
while _socket.get_available_packet_count() > 0:
var broadcast_packet = _socket.get_packet()
var addr_receive = _socket.get_packet_ip()
#var port_receive = _socket.get_packet_port()
#var parsed_data = _parse_packet(broadcast_packet)
_handle_received_data(broadcast_packet, addr_receive)
func _handle_received_data(data: PackedByteArray, addr: String) -> void:
print("данные от %s: %s" % [addr, data])
# Здесь можно эмитировать сигналы или обрабатывать данные
func _on_timer_timeout() -> void:
send_broadcast("hello")
send_broadcast()
func _form_status_packet() -> PackedByteArray:
var buf = PackedByteArray()
buf.resize(126) # Увеличиваем размер до 126 байт
# Заголовок (0-5 байты)
buf.encode_u16(0, 0) # 00 00
buf.encode_u16(2, 0x0cff) # ff 0c
buf.encode_u16(4, 0) # 00 00
# Идентификатор пакета
buf[6] = 103 # 67
# Статус устройств
buf[7] = 0
buf[8] = sockets_status_bit
# Данные EMS-G (байты 9-34)
var ems_g_data = [0x9e00, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000,
0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff]
for i in range(13):
buf.encode_u16(9 + i * 2, ems_g_data[i])
# Данные UG (байты 35-38)
buf.encode_u16(35, 0x0000) # 00 00
buf.encode_u16(37, 0x059e) # 9e 05
# Данные UKP0 (байты 39-70)
for i in ukp0_data.size():
buf[39 + i] = ukp0_data[i]
# Данные UKP1 (байты 71-102)
for i in ukp1_data.size():
buf[71 + i] = ukp1_data[i]
return buf
####
class SocketUDP extends PacketPeerUDP:
func send_to(addr: String, port: int, data: PackedByteArray):
set_dest_address(addr, port)