diff --git a/scenes/pribor-afsp/pribor-afsp-1.tscn b/scenes/pribor-afsp/pribor-afsp-1.tscn index 4c027fd8..08b5216b 100644 --- a/scenes/pribor-afsp/pribor-afsp-1.tscn +++ b/scenes/pribor-afsp/pribor-afsp-1.tscn @@ -1,15 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://8ll27id5ajq1"] +[gd_scene load_steps=4 format=3 uid="uid://8ll27id5ajq1"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_151rh"] [ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_4vyhj"] [ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/контроль/bort-afsp.tscn" id="3_d7iti"] -[sub_resource type="GDScript" id="GDScript_yhnwg"] -script/source = "extends Timer - -func _enter_tree() -> void: wait_time = ProjectSettings.get_setting('application/config/unit_bpo_request_period') -" - [node name="pribor_afsp" type="Control"] layout_mode = 3 anchors_preset = 0 @@ -19,19 +13,20 @@ offset_right = 70.0 offset_bottom = 30.0 scale = Vector2(1, 0.9) script = ExtResource("1_151rh") +prefix_path = "DeviceDescription[DeviceName]" +this_afsp_name = "Устройство РР левого борта" unit_name = &"уарэп-афсп-левый" +settings_path_to_url = "Адрес АФСП левого борта" +settings_path_to_wait_time = "Период опроса состояния АФСП, секунды" metadata/DeviceName = &"Устройство РР левого борта" [node name="request" type="HTTPRequest" parent="."] use_threads = true script = ExtResource("2_4vyhj") -projsettings_path_left = "application/config/Адрес АФСП левого борта" -projsettings_path_right = "application/config/Адрес АФСП правого борта" +request_url = null [node name="timer" type="Timer" parent="request"] -wait_time = 30.0 autostart = true -script = SubResource("GDScript_yhnwg") [node name="bort" parent="." instance=ExtResource("3_d7iti")] layout_mode = 0 diff --git a/scenes/pribor-afsp/pribor-afsp-2.tscn b/scenes/pribor-afsp/pribor-afsp-2.tscn index 1bbfa3d4..f5a30eb8 100644 --- a/scenes/pribor-afsp/pribor-afsp-2.tscn +++ b/scenes/pribor-afsp/pribor-afsp-2.tscn @@ -1,15 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://5uv1idl3lqet"] +[gd_scene load_steps=4 format=3 uid="uid://5uv1idl3lqet"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_tfses"] [ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_miwrd"] [ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/контроль/bort-afsp.tscn" id="3_xpxb5"] -[sub_resource type="GDScript" id="GDScript_yhnwg"] -script/source = "extends Timer - -func _ready(): wait_time = ProjectSettings.get_setting('application/config/unit_rr_request_period') -" - [node name="pribor_afsp" type="Control"] layout_mode = 3 anchors_preset = 0 @@ -19,19 +13,20 @@ offset_right = 81.0 offset_bottom = 108.0 scale = Vector2(1, 0.9) script = ExtResource("1_tfses") +prefix_path = "DeviceDescription[DeviceName]" +this_afsp_name = "Устройство РР правого борта" unit_name = &"уарэп-афсп-правый" +settings_path_to_url = "Адрес АФСП правого борта" +settings_path_to_wait_time = "Период опроса состояния АФСП, секунды" metadata/DeviceName = &"Устройство РР правого борта" [node name="request" type="HTTPRequest" parent="."] use_threads = true script = ExtResource("2_miwrd") -projsettings_path_left = "application/config/Адрес АФСП левого борта" -projsettings_path_right = "application/config/Адрес АФСП правого борта" +request_url = null [node name="timer" type="Timer" parent="request"] -wait_time = 30.0 autostart = true -script = SubResource("GDScript_yhnwg") [node name="bort" parent="." instance=ExtResource("3_xpxb5")] layout_mode = 0 diff --git a/scenes/pribor-afsp/pribor-afsp.gd b/scenes/pribor-afsp/pribor-afsp.gd index 36dadc51..60fad6a6 100644 --- a/scenes/pribor-afsp/pribor-afsp.gd +++ b/scenes/pribor-afsp/pribor-afsp.gd @@ -1,14 +1,29 @@ @tool class_name pribor_afsp extends 'res://scenes/контроль/прибор.gd' -@export var prefix_path: String = 'DeviceDescription[DeviceName]' -@export var unit_name: StringName= '' +@export var prefix_path: String = '' ## Должно быть в JSON +@export var this_afsp_name: String = '' ## Должно быть в JSON +@export var unit_name: StringName= '' ## Должно быть в settings.gd +@export var settings_path_to_url: String = '' ## Должно быть в ProjectSettings +@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings static var json_conv: JSON = JSON.new() static var node_maper = load('res://scenes/контроль/node-maper.gd') # SystemName: "gen" DevList - там состояние связи с генератором по кан шине + +func _ready() -> void: + ProjectSettings.connect('settings_changed', on_settings_chaged) + on_settings_chaged() + + +func on_settings_chaged(): + $request.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path_to_url) + $request/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time)) + tools.allways($request.request_url != null) + + func _on_request_completed(result, _response_code, headers, body: PackedByteArray): var unit_instance: = network.get_unit_instance(unit_name) @@ -47,13 +62,15 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]]) return - var this_afsp_name: StringName = $bort.get_meta('DeviceName', '') var received_afsp_name: StringName = ret_val[0] if this_afsp_name != received_afsp_name: - push_error('не известное устройство: \"%s\", ожидадось: \"%s\"' % [received_afsp_name, this_afsp_name]) + # TODO: Сюда попадаем, когда приходит от другого борта + #push_error('не известное устройство: \"%s\", ожидадось: \"%s\"' % [received_afsp_name, this_afsp_name]) return + unit_instance.rx_tick = Time.get_ticks_msec() + if not unit_instance.online: unit_instance.online = true unit_instance.emit_signal('line_changed', unit_instance) diff --git a/scenes/pribor-afsp/pribor-bpo.tscn b/scenes/pribor-afsp/pribor-bpo.tscn index c1951261..ea8b7b87 100644 --- a/scenes/pribor-afsp/pribor-bpo.tscn +++ b/scenes/pribor-afsp/pribor-bpo.tscn @@ -200,9 +200,6 @@ fname = "Яч. связи" [node name="request" type="HTTPRequest" parent="."] use_threads = true script = ExtResource("4_crej3") -projsettings_path_left = "application/config/Адрес БПО левого борта" -projsettings_path_right = "application/config/Адрес БПО правого борта" -projsettings_path_wait_time = "application/config/Период опроса состояния БПО, секунды" [node name="timer" type="Timer" parent="request"] wait_time = 30.0 diff --git a/scenes/контроль/request.gd b/scenes/контроль/request.gd index 657efbbd..284a8e1d 100644 --- a/scenes/контроль/request.gd +++ b/scenes/контроль/request.gd @@ -18,58 +18,17 @@ const RESULT_STRINGS = { RESULT_REDIRECT_LIMIT_REACHED: 'Запрос достиг максимального предела перенаправления, см. `max_redirects`', RESULT_TIMEOUT: 'Время истекло' } -const headers_left = [ - 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'Accept-Encoding: gzip, deflate', - 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', - 'Connection: keep-alive', - 'Host: 172.22.246.12:8081', - 'Priority: u=0,i', - 'Upgrade-Insecure-Requests: 1', - 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0' ] -const headers_right = [ - 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'Accept-Encoding: gzip, deflate', - 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', - 'Connection: keep-alive', - 'Host: 172.22.246.14:8082', - 'Priority: u=0,i', - 'Upgrade-Insecure-Requests: 1', - 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0' ] - -@export var projsettings_path_left: String = '' -@export var projsettings_path_right: String = '' -@export var projsettings_path_wait_time: String = '' - - -var i_bort: int = 0 -var addr_left: String -var addr_right: String - - -func on_settings_changed(): - addr_left = ProjectSettings.get_setting(projsettings_path_left) - addr_right = ProjectSettings.get_setting(projsettings_path_right) - $timer.wait_time = int(ProjectSettings.get_setting(projsettings_path_wait_time, 5)) +@export var request_url: String = '' func get_result_string(result: Result): return RESULT_STRINGS[result] if RESULT_STRINGS.has(result) else '<неизвестный код результата HTTPRequest - %d>' % result -func _ready(): - ProjectSettings.connect('settings_changed', on_settings_changed) - on_settings_changed() - - func _on_request_timer(): - if HTTPClient.Status.STATUS_REQUESTING == get_http_client_status(): - push_warning('HTTPClient.Status.STATUS_REQUESTING') + if HTTPClient.Status.STATUS_DISCONNECTED != get_http_client_status(): return - var addr = [addr_left, addr_right][i_bort] - var hdrs = [headers_right, headers_left][i_bort] - var rc: = request(addr, hdrs) + var rc: = request(request_url) if rc != Error.OK: - push_error('%s: \"%s\"' % [error_string(rc), addr]) - i_bort = (i_bort + 1) % 2 + push_error('%s: \"%s\"' % [error_string(rc), request_url]) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index bcc4331b..6e75b606 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -45,9 +45,6 @@ const PRIBORS_RES = \\ } -const null_units_names = ['уарэп-афсп-левый', 'уарэп-афсп-правый'] - - func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online) diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index 1a79eb01..44442b39 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -62,7 +62,8 @@ const SETTING_TABLE = [ ['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], ['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], - ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ] ] + ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ], + ['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ] ] const EXTERNAL_CU = 16 ## Внешнее целеуказание const TRASSA = 17