Files
uarep-ctl/scenes/pribor-rtr/pribor-rtr.gd
2024-06-14 14:57:29 +03:00

93 lines
3.3 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends "res://scenes/контроль/прибор.gd"
static var json_parser: JSON = JSON.new()
func get_path_from_meta(meta: String, paths: Array, tokens: Array = ['[', ']', '.']):
paths.clear()
var i_chs = []
for sep in tokens:
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()]
tools.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):
if result != 0:
var rs = $request_rtr.get_result_string(result)
log.error('ошибка: \"%s\"' % rs)
return
var json_str: String = body.get_string_from_utf8()
if not json_str:
push_error('ошибка: не удаётся получить строку utf8 из данных (%s)' % headers)
return
var rc = json_parser.parse(json_str)
if rc != Error.OK:
var err = json_parser.get_error_message()
push_error('ошибка: разбор json прерван - \"%s\" (%s)' % [err, headers])
return
var pp = ['DeviceDescription', 'DeviceName']
var ret_val = [null, false]
var pp_copy = pp.duplicate(true)
tools.get_value_by_path(json_parser.data, pp, ret_val)
if not ret_val[1]:
push_error('ошибка: путь %s не найден (%s)' % [pp_copy, headers])
return
var bort_rtr_name_left: StringName = $left.get_meta('DeviceName', '')
var bort_rtr_name_right: StringName = $right.get_meta('DeviceName', '')
var bb = {bort_rtr_name_left: $left, bort_rtr_name_right: $right}
if not bb.has(ret_val[0]):
return
var bort_rtr = bb[ret_val[0]]
for child in bort_rtr.get_node('konverter/grid').get_children():
map_data_to_item(json_parser.data, child, 'value0')
map_data_to_item(json_parser.data, child, 'value1')
map_data_to_item(json_parser.data, child, 'value2')
for child in bort_rtr.get_node('antenna1/grid').get_children():
map_data_to_item(json_parser.data, child, 'value0')
map_data_to_item(json_parser.data, child, 'value1')
for child in bort_rtr.get_node('antenna2/grid').get_children():
map_data_to_item(json_parser.data, child, 'value0')
map_data_to_item(json_parser.data, child, 'value1')
for child in bort_rtr.get_children():
map_data_to_item(json_parser.data, child, 'state')
map_data_to_item(json_parser.data, child, 'value0')
map_data_to_item(json_parser.data, child, 'value1')
func map_data_to_item(data, item, value_name: StringName):
var meta = item.get_meta(value_name, '')
if not (meta is String):
return
if meta == '':
return
var paths: = Array()
get_path_from_meta(meta, paths)
var ret_val: = [null, false]
var paths_copy = paths.duplicate(true)
tools.get_value_by_path(data, paths, ret_val)
if ret_val[1]:
item.set(value_name, ret_val[0])
else:
push_error('ошибка: поле по пути %s для $%s.%s не найдено' % [paths_copy, item.name, value_name])