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])