Доработка Для отправки УКП сообщений
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user