diff --git a/PRD_MP550.tscn b/PRD_MP550.tscn index 8bb1329..313c3b9 100644 --- a/PRD_MP550.tscn +++ b/PRD_MP550.tscn @@ -300,8 +300,8 @@ metadata/_edit_lock_ = true [node name="body_grid" type="GridContainer" parent="TabContainer/PRD"] layout_mode = 0 offset_left = 376.0 -offset_top = 14.0 -offset_right = 1552.0 +offset_top = -4.0 +offset_right = 1648.0 offset_bottom = 718.0 [node name="litera_2_4_6" type="GridContainer" parent="TabContainer/PRD/body_grid"] @@ -322,61 +322,6 @@ custom_minimum_size = Vector2(50, 0) layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxTexture_1as41") -[node name="module_fs" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_2_4_6"] -visible = false -custom_minimum_size = Vector2(250, 250) -layout_mode = 2 - -[node name="LABEL" type="Label" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs"] -layout_mode = 2 -text = "ЛИТЕРА 2! ПРД-Н!" - -[node name="con" type="Button" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 -text = " Подключение " - -[node name="ip_connect" type="Label" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/con"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 118.0 -offset_bottom = 55.0 - -[node name="get_freq" type="Button" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -text = " Получить н/ч " - -[node name="freq_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_freq"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 106.0 -offset_bottom = 55.0 - -[node name="get_att" type="Button" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -text = " Получить att " - -[node name="att_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_att"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 105.0 -offset_bottom = 55.0 - -[node name="get_gen_status" type="Button" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -toggle_mode = true -text = "Переключатель генератора " - -[node name="status_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_gen_status"] -layout_mode = 0 -offset_top = 33.0 -offset_right = 84.0 -offset_bottom = 56.0 - [node name="yau07b_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_2_4_6"] layout_mode = 2 script = ExtResource("2_vmbyo") @@ -394,7 +339,7 @@ metadata/_edit_lock_ = true [node name="PSK" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_2_4_6"] material = ExtResource("3_3syd3") -position = Vector2(906, 11) +position = Vector2(914, 5) scale = Vector2(0.247968, 0.234167) texture = SubResource("PlaceholderTexture2D_723du") offset = Vector2(800, 600) @@ -423,58 +368,11 @@ custom_minimum_size = Vector2(500, 350) layout_mode = 2 columns = 5 -[node name="module_fs" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_3_5_7"] -custom_minimum_size = Vector2(250, 250) +[node name="fs_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +custom_minimum_size = Vector2(350, 0) layout_mode = 2 - -[node name="LABEL" type="Label" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs"] -layout_mode = 2 -text = "ЛИТЕРА 2! ПРД-Н!" - -[node name="con" type="Button" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -text = " Подключение " - -[node name="ip_connect" type="Label" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/con"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 118.0 -offset_bottom = 55.0 - -[node name="get_freq" type="Button" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -text = " Получить н/ч " - -[node name="freq_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_freq"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 106.0 -offset_bottom = 55.0 - -[node name="get_att" type="Button" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -text = " Получить att " - -[node name="att_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_att"] -layout_mode = 0 -offset_top = 32.0 -offset_right = 105.0 -offset_bottom = 55.0 - -[node name="get_gen_status" type="Button" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs"] -layout_mode = 2 -size_flags_horizontal = 0 -toggle_mode = true -text = "Переключатель генератора " - -[node name="status_ind" type="Label" parent="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_gen_status"] -layout_mode = 0 -offset_top = 33.0 -offset_right = 84.0 -offset_bottom = 56.0 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true [node name="space" type="Panel" parent="TabContainer/PRD/body_grid/litera_3_5_7"] custom_minimum_size = Vector2(50, 0) @@ -541,7 +439,7 @@ metadata/_edit_lock_ = true [node name="PSK2" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_3_5_7"] material = ExtResource("3_3syd3") -position = Vector2(905, 10) +position = Vector2(914, -6) scale = Vector2(0.247968, 0.234167) texture = SubResource("PlaceholderTexture2D_723du") offset = Vector2(800, 600) @@ -1138,14 +1036,6 @@ text = "Темп" [connection signal="pressed" from="Background/side_panel/save_config" to="." method="_on_save_config"] [connection signal="pressed" from="Background/side_panel/load_config" to="." method="_on_load_config"] [connection signal="pressed" from="read_isa" to="." method="_on_read_isa_pressed"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/con" to="TabContainer/Modul_fs" method="_on_start"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_freq" to="TabContainer/Modul_fs" method="_on_send_pressed"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_att" to="TabContainer/Modul_fs" method="_on_get_att"] -[connection signal="toggled" from="TabContainer/PRD/body_grid/litera_2_4_6/module_fs/get_gen_status" to="TabContainer/Modul_fs" method="_on_get_status"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/con" to="TabContainer/Modul_fs" method="_on_start"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_freq" to="TabContainer/Modul_fs" method="_on_send_pressed"] -[connection signal="pressed" from="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_att" to="TabContainer/Modul_fs" method="_on_get_att"] -[connection signal="toggled" from="TabContainer/PRD/body_grid/litera_3_5_7/module_fs/get_gen_status" to="TabContainer/Modul_fs" method="_on_get_status"] [connection signal="toggled" from="TabContainer/PRD/body_grid/litera_3_5_7/yau_07b/Zapret2" to="." method="_on_zapret2"] [connection signal="toggled" from="TabContainer/PRD/body_grid/litera_3_5_7/yau_07b/Modul_um_2" to="." method="_on_modul_um_2"] [connection signal="toggled" from="TabContainer/PRD/body_grid/litera_3_5_7/yau_07b/fgos_2" to="." method="_on_fgos_2"] diff --git a/ems_1 b/ems_1 new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/ems_1 @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/scripts/PRD.gd b/scripts/PRD.gd index 6d06e73..4e2d33e 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -62,8 +62,21 @@ func _ready() -> void: node_select_fs_1.get_node2(1, 3).editable = true node_select_fs_1.set_node_text(0, 4, 'Генератор') node_select_fs_1.set_node_text(0, 5, 'fpga') - node_select_fs_1.set_node_text(0, 6, 'ВЧ тракт') - node_select_fs_1.set_node_text(0, 7, 'Пр. питания') + node_select_fs_1.set_node_text(0, 6, 'СИ 2 ОТ ФС') + + var node_select_fs_2 = $TabContainer/PRD/body_grid/litera_3_5_7/fs_control + draw_tabl(node_select_fs_2, Constants.ROWS_FS, Constants.ROWS_FS.size()) + node_select_fs_2.set_columns_min_size([120, 120, 150]) + node_select_fs_2.set_node_text(0, 0, 'ПРД-Н') + node_select_fs_2.set_node_text(1, 0, 'Литера_3') + node_select_fs_2.set_node_text(0, 1, 'Состояние') + node_select_fs_2.set_node_text(0, 2, 'Частота') + node_select_fs_2.get_node2(1, 2).placeholder_text = '500' + node_select_fs_2.set_node_text(0, 3, 'Аттенюатор') + node_select_fs_2.get_node2(1, 3).editable = true + node_select_fs_2.set_node_text(0, 4, 'Генератор') + node_select_fs_2.set_node_text(0, 5, 'fpga') + node_select_fs_2.set_node_text(0, 6, 'СИ 3 ОТ ФС') # Выбор прибора для подключения var node_select_device = $TabContainer/PRD/select_dev @@ -99,6 +112,7 @@ func _ready() -> void: Network.connect('yau_receive', Callable(self, '_on_data_received')) Network.connect('yau_read_isa', Callable(self, '_on_read_isa')) Network.connect('data_from_fs_1', Callable(self, '_on_data_fs_1')) + Network.connect('data_from_fs_2', Callable(self, '_on_data_fs_2')) node_select_yau_07b.get_node2(1, 1).get_child(1, false).connect('toggled', Callable(self, '_on_zapret1')) node_select_yau_07b.get_node2(1, 2).connect('item_selected', Callable(self, '_on_modul_um_1')) @@ -111,7 +125,8 @@ func _ready() -> void: node_select_yau_07b_2.get_node2(1, 4).connect('item_selected', Callable(self, '_on_attenuator_2')) node_select_yau_07b_2.get_node2(1, 5).get_child(1, false).connect('toggled', Callable(self, '_on_fgos_2')) - node_select_fs_1.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status')) + node_select_fs_1.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status_1')) + node_select_fs_2.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status_2')) func draw_control_panel_prd(mode) -> void: for node_path in Constants.NODE_MAP: @@ -182,11 +197,34 @@ func _on_data_fs_1(fs_1_data): Constants.CMD.BASE_GET_CURRENT_TEMP: if GRP == Constants.GROUP.BASE: node_select_fs_1.set_node_text(1, 5, '%.2f' % fs_1_data.decode_float(0xC) + ' °C') - node_select_fs_1.set_node_text(1, 6, str(fs_1_data.decode_float(0x10)) + ' °C') - node_select_fs_1.set_node_text(1, 7, str(fs_1_data.decode_float(0x14)) + ' °C') #$read.text = str(fs_1_data.hex_encode()) + +func _on_data_fs_2(fs_2_data): + var node_select_fs_2 = $TabContainer/PRD/body_grid/litera_3_5_7/fs_control + var GRP = fs_2_data.decode_u8(0x0) + var CMD = fs_2_data.decode_u8(0x1) + match CMD: + Constants.CMD.READ_CARRIER: + if GRP == Constants.GROUP.BASE: + node_select_fs_2.set_node_text(2, 2, str(fs_2_data.decode_u64(0xC)) + ' Гц') + Constants.CMD.READ_ATT: + if GRP == Constants.GROUP.RF: + node_select_fs_2.set_node_text(2, 3, '-' + str(fs_2_data.decode_float(0x18)) + ' dB') + Constants.CMD.READ_GEN_STATUS: + if GRP == Constants.GROUP.GENERATOR: + if fs_2_data.decode_u32(0xC) == 0: + node_select_fs_2.set_node_text(2, 4, 'Включен') + node_select_fs_2.get_node2(2, 4).modulate = Color.AQUAMARINE + else: + node_select_fs_2.set_node_text(2, 4, 'Выключен') + node_select_fs_2.get_node2(2, 4).modulate = Color.CRIMSON + Constants.CMD.BASE_GET_CURRENT_TEMP: + if GRP == Constants.GROUP.BASE: + node_select_fs_2.set_node_text(1, 5, '%.2f' % fs_2_data.decode_float(0xC) + ' °C') + + ## Рисует таблицу func draw_tabl(tbl: Node, row: Array, count_row: int): for i_row in count_row: @@ -209,21 +247,21 @@ func _on_data_received(data_from_yau_07): ## УКП - for i in range(8): ## Мощность от УКП_1 + for i in range(6): ## Мощность от УКП_1 var power_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i) node_select1.set_node_text(0, i+1, '%d' % power_ukp_1) - for i in range(8): ## Температура от УКП_1 + for i in range(6): ## Температура от УКП_1 var temperature_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * i) var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP node_select1.set_node_text(1, i+1, '%d °С' % TMP) - for i_pow in range(8): ## Мощность от УКП_2 + for i_pow in range(6): ## Мощность от УКП_2 if len(data_from_yau_07) > Constants.DataIndices.POWER_UKP_2 + 2 * i_pow: var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i_pow) node_select2.set_node_text(0, i_pow+1, '%d' % power_ukp_2) - for row in range(8): ## Температура от УКП_2 + for row in range(6): ## Температура от УКП_2 if len(data_from_yau_07) > Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * row: var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * row) var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP @@ -275,7 +313,8 @@ func on_btn_select(intem_from_sector: int) -> void: Network.on_command_change_device(meta) flag_mode = meta[2] draw_control_panel_prd(flag_mode) - _on_start_fs() + _on_start_fs_1() + _on_start_fs_2() func fill_item(node: Node, i_column: int, i_row: int, arr: Dictionary, select: int = 0) -> void: @@ -382,12 +421,23 @@ func set_bits(v, a, m): return (~m) & v | a & m -func _on_start_fs(): +func _on_start_fs_1(): unit_fs.start_session() unit_fs.base_get_current_temp() -func _on_get_status(toggled_btn): +func _on_start_fs_2(): + unit_fs.start_session() + unit_fs.base_get_current_temp() + + +func _on_get_status_1(toggled_btn): + var inverted_state = not toggled_btn + unit_fs.set_gen_state(inverted_state) + unit_fs.get_gen_state() + + +func _on_get_status_2(toggled_btn): var inverted_state = not toggled_btn unit_fs.set_gen_state(inverted_state) unit_fs.get_gen_state() diff --git a/scripts/constants.gd b/scripts/constants.gd index 036e904..81b2c1e 100644 --- a/scripts/constants.gd +++ b/scripts/constants.gd @@ -20,8 +20,6 @@ const ROWS_REGS_DATA: Array = [ [TableNode, TableNode], [TableNode, TableNode], [TableNode, TableNode], - [TableNode, TableNode], - [TableNode, TableNode], [TableNode, TableNode]] const ROWS_YAU_07B: Array = [ [TableNode, TableNode], @@ -30,9 +28,7 @@ const ROWS_YAU_07B: Array = [ [TableNode, TableList], [TableNode, TableList], [TableNode, Switch], - [TableNode, TableNode], - [TableNode, TableNode], - [TableNode, TableNode],] + [TableNode, TableNode]] const ROWS_FS: Array = [ [TableNode, TableNode, TableNode], [TableNode, TableNode, TableNode], @@ -40,9 +36,7 @@ const ROWS_FS: Array = [ [TableNode, TableNode, TableNode], [TableNode, Switch, TableNode], [TableNode, TableNode, TableNode], - [TableNode, TableNode, TableNode], - [TableNode, TableNode, TableNode], - [TableNode, TableNode, TableNode]] + [TableNode, SocketStatus, TableNode]] const ADDRESSES: Array = [ ['ПРД-Н1', '10.1.1.11', 50011, MODE.PRD_H, '10.1.2.18', '10.1.2.19', ''], ['ПРД-Н2', '10.1.1.21', 50021, MODE.PRD_H, '10.1.2.34', '10.1.2.35', ''], diff --git a/scripts/ems_g.gd b/scripts/ems_g.gd index e4bdd0b..6638700 100644 --- a/scripts/ems_g.gd +++ b/scripts/ems_g.gd @@ -143,6 +143,8 @@ func process_sockets_vert(blank: int, imp: int, count: int, col: int, parent_nod set_frame(get_specific_node(parent_node2, 2), frame_type) if i == 9: set_frame(get_specific_node(parent_node2, 3), frame_type) + var CI_2 = parent_node2.get_child(3).get_child(0).get_child(0).get_child(0).get_child(0).get_node2(1, 6).get_child(1) + set_frame(CI_2, frame_type) if i == 10: set_frame(get_specific_node(parent_node2, 4), frame_type) @@ -151,17 +153,9 @@ func get_specific_node(parent_node2: Node, child_index: int)-> Node: return parent_node2.get_child(3, false).get_child(1).get_child(4).get_child(child_index).get_child(3) -func _process(_delta: float) -> void: - pass - - func set_frame(node: Node, val: int): node.set_frame(val) -func set_init(): - pass - - ## Создает связь между кнопками func create_link_button(node, count_rows_sart: int, count_rows_end: int, coln_start: int, coln_end: int): ## META_EMS_G[[Номер входа, Номер выхода]] diff --git a/scripts/network.gd b/scripts/network.gd index 4a2cd01..268f1c5 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -18,15 +18,24 @@ var ip_fs_1: String = Constants.ADDRESSES[0][4] var command_stack: Array var state_fs = Constants.STATE.IDLE var client_fs_1: StreamPeer -var peerstream: PacketPeer +var peerstream_fs_1: PacketPeer + +var ip_fs_2: String = Constants.ADDRESSES[0][5] +var command_stack_fs_2: Array +var state_fs_2 = Constants.STATE.IDLE +var client_fs_2: StreamPeer +var peerstream_fs_2: PacketPeer signal yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой signal yau_receive(_data_from_yau) signal yau_read_isa(_unit_isa_ports) signal data_send() +signal data_send_2() signal data_from_fs_1(data:PackedByteArray) +signal data_from_fs_2(data:PackedByteArray) signal port_opened(port_name: String) +signal port_opened_2(port_name: String) signal port_closed(port_name: String) signal port_error(error_str: String) @@ -58,7 +67,7 @@ func poll_receive_yau07(sock: Socket) -> bool: ## Приёмник func poll_receive_fs(client: StreamPeerTCP): client.poll() - var peer = peerstream.get_stream_peer() + var peer = peerstream_fs_1.get_stream_peer() # Проверяем, существует ли соединение if not peer: emit_signal("port_error", ip_fs_1) @@ -77,6 +86,27 @@ func poll_receive_fs(client: StreamPeerTCP): state_fs = Constants.STATE.DONE +func poll_receive_fs_2(client: StreamPeerTCP): + client.poll() + var peer = peerstream_fs_2.get_stream_peer() + # Проверяем, существует ли соединение + if not peer: + emit_signal("port_fs_2_error", ip_fs_2) + return + # Проверяем состояние подключения + if client.get_status() != StreamPeerTCP.STATUS_CONNECTED: + emit_signal("port_closed_fs_2", ip_fs_2) + return + + if peer.get_available_bytes() > 0: + var rx_data: PackedByteArray + rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) + emit_signal("data_from_fs_2", rx_data) + emit_signal("port_opened_fs_2", ip_fs_2) + if state_fs_2 == Constants.STATE.SEND: + state_fs_2 = Constants.STATE.DONE + + func _ready() -> void: # Привязка для принятия широковещательного канала soc_brodcast = Socket.new() @@ -102,6 +132,8 @@ func _process(delta: float) -> void: if client_fs_1: poll_receive_fs(client_fs_1) + if client_fs_2: + poll_receive_fs_2(client_fs_2) poll_receive_yau07(soc_brodcast) poll_receive_yau07(soc_unicast) @@ -164,9 +196,10 @@ func on_command_change_device(meta_device): ip_address_yau = meta_device[0] ip_port_yau = meta_device[1] ip_fs_1 = meta_device[3] - #ip_fs_2 = meta_device[4] + ip_fs_2 = meta_device[4] #ip_fs_3 = meta_device[5] connect_fs() + connect_fs_2() func state_machine_fs(): @@ -185,18 +218,18 @@ func connect_fs(): disconnect_fs(client_fs_1) client_fs_1 = StreamPeerTCP.new() - peerstream = PacketPeerStream.new() + peerstream_fs_1 = PacketPeerStream.new() var rc = client_fs_1.connect_to_host(ip_fs_1, Constants.PORT_FS) if rc!= Error.OK: emit_signal("port_error", ip_fs_1) else: - peerstream.set_stream_peer(client_fs_1) + peerstream_fs_1.set_stream_peer(client_fs_1) # Отправить команду для ФС func send_data(data_to_sand: PackedByteArray): if client_fs_1.get_status() == 2: - var peer = peerstream.get_stream_peer() + var peer = peerstream_fs_1.get_stream_peer() if peer: peer.put_data(data_to_sand) emit_signal("data_send") @@ -208,3 +241,43 @@ func disconnect_fs(client_for_leave): state_fs = Constants.STATE.IDLE command_stack = [] + + +func state_machine_fs_2(): + if client_fs_2: + ## State fs machine + if (state_fs_2 == Constants.STATE.IDLE) or (state_fs_2 == Constants.STATE.DONE): + if command_stack_fs_2: + var pack: Array = command_stack_fs_2.pop_front() + send_data_fs_2(pack) + state_fs_2 = Constants.STATE.SEND + + +# Подключится к модулю ФС +func connect_fs_2(): + if client_fs_2: + disconnect_fs_2(client_fs_2) + + client_fs_2 = StreamPeerTCP.new() + peerstream_fs_2 = PacketPeerStream.new() + var rc = client_fs_2.connect_to_host(ip_fs_2, Constants.PORT_FS) + if rc!= Error.OK: + emit_signal("port_error", ip_fs_2) + else: + peerstream_fs_2.set_stream_peer(client_fs_2) + + +# Отправить команду для ФС +func send_data_fs_2(data_to_sand: PackedByteArray): + if client_fs_2.get_status() == 2: + var peer = peerstream_fs_2.get_stream_peer() + if peer: + peer.put_data(data_to_sand) + emit_signal("data_send_2") + + +# Разорвать соединение с ФС +func disconnect_fs_2(client_for_leave): + client_for_leave.disconnect_from_host() + state_fs_2 = Constants.STATE.IDLE + command_stack = []