Files
uarep-ctl/scenes/pribor-rtr/pribor-rtr.gd

87 lines
3.0 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):
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 pp = ['DeviceDescripton', 'DeviceName']
var ret_val = [null, false]
tools.get_value_by_path(json_parser.data, pp, ret_val)
if not ret_val[1]:
return
for bort_rtr in [$left, $right]:
var bort_rtr_name = bort_rtr.get_meta('DeviceName', '')
if bort_rtr_name != ret_val[0]:
continue
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])