Рефактор. Имена общих сигналов в управляемой форме
This commit is contained in:
76
scenes/pribor-rtr/pribor-rtr.gd
Normal file
76
scenes/pribor-rtr/pribor-rtr.gd
Normal file
@@ -0,0 +1,76 @@
|
||||
extends "res://scenes/контроль/прибор.gd"
|
||||
|
||||
|
||||
static var json_parser: JSON = JSON.new()
|
||||
|
||||
|
||||
func get_string_slice(s_in: String, s_out: Array, i0: int, i1: int):
|
||||
for i in range(i0, i1):
|
||||
if s_in[i] != '\'':
|
||||
s_out[0] += s_in[i]
|
||||
|
||||
|
||||
func get_paths(meta: String, paths: Array):
|
||||
paths.clear()
|
||||
var i_chs = []
|
||||
for sep in ['[', ']', '.']:
|
||||
var i = 0
|
||||
while i != -1:
|
||||
i = meta.find(sep, i + 1)
|
||||
i_chs.append(i)
|
||||
i_chs.pop_back()
|
||||
i_chs.sort()
|
||||
|
||||
var i0 = 0
|
||||
for i1 in i_chs:
|
||||
var ss: = [String()]
|
||||
get_string_slice(meta, ss, i0, i1)
|
||||
if ss[0].is_valid_int():
|
||||
paths.append(ss[0].to_int())
|
||||
else:
|
||||
if ss[0]:
|
||||
paths.append(ss[0])
|
||||
i0 = i1 + 1
|
||||
|
||||
|
||||
func _on_request_rtr_request_completed(result, _response_code, _headers, body: PackedByteArray):
|
||||
var rs = $request_rtr.get_result_string(result)
|
||||
if result != 0:
|
||||
log.error('ошибка при приёме: \"%s\"' % rs)
|
||||
return
|
||||
var json_str: String = body.get_string_from_utf8()
|
||||
if not json_str:
|
||||
return
|
||||
var rc = json_parser.parse(json_str)
|
||||
if rc != Error.OK:
|
||||
var err = json_parser.get_error_message()
|
||||
log.error('ошибка при разборе: \"%s\"' % err)
|
||||
return
|
||||
|
||||
var paths: = Array()
|
||||
var ret_val: = [null]
|
||||
var meta: = String()
|
||||
|
||||
for child in $konverter/grid.get_children():
|
||||
meta = child.get_meta('path_value0')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value0 = ret_val[0]
|
||||
|
||||
meta = child.get_meta('path_value1')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value1 = ret_val[0]
|
||||
|
||||
meta = child.get_meta('path_value2')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value2 = ret_val[0]
|
||||
|
||||
|
||||
func get_value_by_path(obj, indexes: Array, ret_val: Array):
|
||||
var index = indexes.pop_at(0)
|
||||
if indexes.size():
|
||||
get_value_by_path(obj[index], indexes, ret_val)
|
||||
else:
|
||||
ret_val[0] = obj[index]
|
||||
43
scenes/pribor-rtr/request-rtr.gd
Normal file
43
scenes/pribor-rtr/request-rtr.gd
Normal file
@@ -0,0 +1,43 @@
|
||||
extends HTTPRequest
|
||||
|
||||
|
||||
const RESULT_STRINGS = {
|
||||
RESULT_SUCCESS: 'Request successful',
|
||||
RESULT_CHUNKED_BODY_SIZE_MISMATCH: 'CHUNKED_BODY_SIZE_MISMATCH',
|
||||
RESULT_CANT_CONNECT: 'Request failed while connecting',
|
||||
RESULT_CANT_RESOLVE: 'Request failed while resolving',
|
||||
RESULT_CONNECTION_ERROR: 'Request failed due to connection (read/write) error',
|
||||
RESULT_TLS_HANDSHAKE_ERROR: 'Request failed on TLS handshake',
|
||||
RESULT_NO_RESPONSE: 'Request does not have a response (yet)',
|
||||
RESULT_BODY_SIZE_LIMIT_EXCEEDED: 'Request exceeded its maximum size limit, see body_size_limit',
|
||||
RESULT_BODY_DECOMPRESS_FAILED: 'BODY_DECOMPRESS_FAILED',
|
||||
RESULT_REQUEST_FAILED: 'Request failed (currently unused)',
|
||||
RESULT_DOWNLOAD_FILE_CANT_OPEN: 'HTTPRequest couldn\'t open the download file',
|
||||
RESULT_DOWNLOAD_FILE_WRITE_ERROR: 'HTTPRequest couldn\'t write to the download file',
|
||||
RESULT_REDIRECT_LIMIT_REACHED: 'Request reached its maximum redirect limit, see max_redirects',
|
||||
RESULT_TIMEOUT: 'TIMEOUT' }
|
||||
|
||||
|
||||
var i_bort: int = 0
|
||||
var addr_left: String
|
||||
var addr_right: String
|
||||
var request_period: float = 1.0
|
||||
|
||||
|
||||
func get_result_string(result: Result):
|
||||
return RESULT_STRINGS[result] if RESULT_STRINGS.has(result) else '<неизвестный код результата HTTPRequest - %d>' % result
|
||||
|
||||
|
||||
|
||||
func _ready():
|
||||
addr_left = ProjectSettings.get_setting('application/config/unit_rr_left_bort')
|
||||
addr_right = ProjectSettings.get_setting('application/config/unit_rr_right_bort')
|
||||
request_period = ProjectSettings.get_setting('application/config/unit_rr_request_period')
|
||||
|
||||
|
||||
func _on_request_timer():
|
||||
var addr = [addr_left, addr_right][i_bort]
|
||||
var rc = request(addr)
|
||||
if rc != Error.OK:
|
||||
var s: String = '%s: %s' % [error_string(rc), addr]
|
||||
i_bort = (i_bort + 1) % 2
|
||||
@@ -27,13 +27,13 @@ func _ready() -> void:
|
||||
log.info('Текущая версия ПО УАРЭП: %s' % commit.VCS_HEAD)
|
||||
threats.connect('threat_new', Callable(self, 'on_threats_changed').bind('Цель обнаружена'))
|
||||
threats.connect('threat_lost', Callable(self, 'on_threats_changed').bind('Цель потеряна'))
|
||||
signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind('Создан сеанс помехи'))
|
||||
signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind('Сеанс помехи отключен'))
|
||||
signaller.connect('режим_работа', Callable(log, 'info').bind('Программа в режиме \"Работа\"'))
|
||||
signaller.connect('режим_настройки', Callable(log, 'info').bind('Программа в режиме \"Настройки\"'))
|
||||
signaller.connect('режим_эмс', Callable(log, 'info').bind('Программа в режиме \"ЭМС\"'))
|
||||
signaller.connect('режим_журнал', Callable(log, 'info').bind('Программа в режиме \"Журнал\"'))
|
||||
signaller.connect('режим_контроль', Callable(log, 'info').bind('Программа в режиме \"Контроль\"'))
|
||||
signaller.conn(signaller.interfer_new, Callable(self, 'on_interfer_new').bind('Создан сеанс помехи'))
|
||||
signaller.conn(signaller.interfer_off, Callable(self, 'on_interfer_off').bind('Сеанс помехи отключен'))
|
||||
signaller.conn(signaller.режим_работа, Callable(log, 'info').bind('Программа в режиме \"Работа\"'))
|
||||
signaller.conn(signaller.режим_настройки, Callable(log, 'info').bind('Программа в режиме \"Настройки\"'))
|
||||
signaller.conn(signaller.режим_эмс, Callable(log, 'info').bind('Программа в режиме \"ЭМС\"'))
|
||||
signaller.conn(signaller.режим_журнал, Callable(log, 'info').bind('Программа в режиме \"Журнал\"'))
|
||||
signaller.conn(signaller.режим_контроль, Callable(log, 'info').bind('Программа в режиме \"Контроль\"'))
|
||||
|
||||
|
||||
func _on_clear_button_down() -> void:
|
||||
|
||||
@@ -3,6 +3,8 @@ class_name Signaller extends Node
|
||||
## Обмен сигналами между узлами. Здесь объявлены сигналы, которые используют
|
||||
## два и более узла, из разных файлов. Должен быть помещён в автозагрузку.
|
||||
|
||||
func conn(sgnl: Signal, clbl: Callable): connect(sgnl.get_name(), clbl)
|
||||
|
||||
## Вызывается при переходе в режим [b]Работа[/b]
|
||||
signal режим_работа()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user