Обновление индикатора онлайн в контроле
Some checks failed
Локальный тест / test (push) Has been cancelled
Some checks failed
Локальный тест / test (push) Has been cancelled
This commit is contained in:
@@ -29,11 +29,7 @@ func _on_response_received(response: String, success: bool) -> void:
|
|||||||
var unit_instance = network.get_unit_instance(unit_name)
|
var unit_instance = network.get_unit_instance(unit_name)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
log.error('Ошибка запроса: %s' % response)
|
log.error('Ошибка запроса или нет связи: %s' % response)
|
||||||
if unit_instance.online:
|
|
||||||
unit_instance.online = false
|
|
||||||
unit_instance.emit_signal('line_changed', unit_instance)
|
|
||||||
# При ошибке сбрасываем UI в 0
|
|
||||||
_reset_ui_to_zero()
|
_reset_ui_to_zero()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -42,10 +38,6 @@ func _on_response_received(response: String, success: bool) -> void:
|
|||||||
if parse_result != OK:
|
if parse_result != OK:
|
||||||
var err = json_conv.get_error_message()
|
var err = json_conv.get_error_message()
|
||||||
push_error('разбор json прерван - "%s"' % err)
|
push_error('разбор json прерван - "%s"' % err)
|
||||||
if unit_instance.online:
|
|
||||||
unit_instance.online = false
|
|
||||||
unit_instance.emit_signal('line_changed', unit_instance)
|
|
||||||
# При ошибке парсинга сбрасываем UI в 0
|
|
||||||
_reset_ui_to_zero()
|
_reset_ui_to_zero()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -58,7 +50,6 @@ func _on_response_received(response: String, success: bool) -> void:
|
|||||||
|
|
||||||
if not ret_val[1]:
|
if not ret_val[1]:
|
||||||
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
|
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
|
||||||
# Если путь не найден, сбрасываем UI в 0
|
|
||||||
_reset_ui_to_zero()
|
_reset_ui_to_zero()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -69,12 +60,6 @@ func _on_response_received(response: String, success: bool) -> void:
|
|||||||
# Ответ от другого борта - игнорируем
|
# Ответ от другого борта - игнорируем
|
||||||
return
|
return
|
||||||
|
|
||||||
# Обновляем статус online
|
|
||||||
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)
|
|
||||||
|
|
||||||
# Обновляем UI элементы из JSON
|
# Обновляем UI элементы из JSON
|
||||||
_update_ui(json_conv.data)
|
_update_ui(json_conv.data)
|
||||||
|
|
||||||
|
|||||||
109
scripts/rtr.gd
109
scripts/rtr.gd
@@ -13,6 +13,7 @@ signal request_sent_right(url: String) # Отправлен запрос к
|
|||||||
# Сигналы получения ответа
|
# Сигналы получения ответа
|
||||||
signal response_received_left(response: String, success: bool) # Получен ответ от левого борта
|
signal response_received_left(response: String, success: bool) # Получен ответ от левого борта
|
||||||
signal response_received_right(response: String, success: bool) # Получен ответ от правого борта
|
signal response_received_right(response: String, success: bool) # Получен ответ от правого борта
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Константы
|
#region Константы
|
||||||
@@ -48,6 +49,14 @@ var last_response_right: String = '' # Последний успешный от
|
|||||||
var last_error_left: String = '' # Последняя ошибка левого борта
|
var last_error_left: String = '' # Последняя ошибка левого борта
|
||||||
var last_error_right: String = '' # Последняя ошибка правого борта
|
var last_error_right: String = '' # Последняя ошибка правого борта
|
||||||
|
|
||||||
|
# Статус online для каждого борта
|
||||||
|
var online_left: bool = false
|
||||||
|
var online_right: bool = false
|
||||||
|
|
||||||
|
# Время последнего успешного ответа
|
||||||
|
var last_success_time_left: int = 0
|
||||||
|
var last_success_time_right: int = 0
|
||||||
|
|
||||||
var timeout: float
|
var timeout: float
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -59,11 +68,10 @@ func _ready() -> void:
|
|||||||
http_request.request_completed.connect(_on_request_completed)
|
http_request.request_completed.connect(_on_request_completed)
|
||||||
|
|
||||||
# Создаем и настраиваем таймер для обработки таймаутов
|
# Создаем и настраиваем таймер для обработки таймаутов
|
||||||
|
|
||||||
timeout_timer = Timer.new()
|
timeout_timer = Timer.new()
|
||||||
add_child(timeout_timer)
|
add_child(timeout_timer)
|
||||||
timeout_timer.timeout.connect(_on_timeout)
|
timeout_timer.timeout.connect(_on_timeout)
|
||||||
timeout_timer.one_shot = true # Таймер срабатывает только один раз
|
timeout_timer.one_shot = true
|
||||||
|
|
||||||
# Подписываемся на сигнал запуска управления устройством
|
# Подписываемся на сигнал запуска управления устройством
|
||||||
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
|
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
|
||||||
@@ -93,6 +101,28 @@ func has_left_success() -> bool:
|
|||||||
|
|
||||||
func has_right_success() -> bool:
|
func has_right_success() -> bool:
|
||||||
return not last_response_right.is_empty()
|
return not last_response_right.is_empty()
|
||||||
|
|
||||||
|
# Геттеры для статуса online
|
||||||
|
func is_left_online() -> bool:
|
||||||
|
return online_left
|
||||||
|
|
||||||
|
func is_right_online() -> bool:
|
||||||
|
return online_right
|
||||||
|
|
||||||
|
# Обновление статуса online
|
||||||
|
func _update_online_status(side: String, is_online: bool) -> void:
|
||||||
|
var unit_instance
|
||||||
|
|
||||||
|
# Выбираем нужный экземпляр в зависимости от борта
|
||||||
|
if side == "left":
|
||||||
|
unit_instance = network.get_unit_instance('уарэп-афсп-левый')
|
||||||
|
else: # side == "right"
|
||||||
|
unit_instance = network.get_unit_instance('уарэп-афсп-правый')
|
||||||
|
|
||||||
|
# Обновляем статус если изменился
|
||||||
|
if unit_instance and unit_instance.online != is_online:
|
||||||
|
unit_instance.online = is_online
|
||||||
|
unit_instance.emit_signal('line_changed', unit_instance)
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Обработчики сигналов
|
#region Обработчики сигналов
|
||||||
@@ -124,45 +154,55 @@ func _on_request_completed(result: int, response_code: int, _headers: PackedStri
|
|||||||
# Останавливаем таймер ожидания
|
# Останавливаем таймер ожидания
|
||||||
timeout_timer.stop()
|
timeout_timer.stop()
|
||||||
|
|
||||||
|
var is_left = (current_state == State.REQUESTING_LEFT)
|
||||||
|
var current_time = Time.get_ticks_msec()
|
||||||
|
|
||||||
# Проверяем успешность ответа
|
# Проверяем успешность ответа
|
||||||
if response_code == 200:
|
if response_code == 200:
|
||||||
var response_text = body.get_string_from_utf8()
|
var response_text = body.get_string_from_utf8()
|
||||||
_save_response(response_text)
|
_save_response(response_text)
|
||||||
|
|
||||||
# Испускаем сигнал успешного получения ответа
|
# Обновляем статус online
|
||||||
match current_state:
|
if is_left:
|
||||||
State.REQUESTING_LEFT:
|
last_success_time_left = current_time
|
||||||
emit_signal('response_received_left', response_text, true)
|
_update_online_status("left", true)
|
||||||
State.REQUESTING_RIGHT:
|
emit_signal('response_received_left', response_text, true)
|
||||||
emit_signal('response_received_right', response_text, true)
|
else:
|
||||||
|
last_success_time_right = current_time
|
||||||
|
_update_online_status("right", true)
|
||||||
|
emit_signal('response_received_right', response_text, true)
|
||||||
|
|
||||||
_on_request_finished()
|
_on_request_finished()
|
||||||
else:
|
else:
|
||||||
var error_msg = 'HTTP ошибка %d: %s' % [response_code, get_result_string(result)]
|
var error_msg = 'HTTP ошибка %d: %s' % [response_code, get_result_string(result)]
|
||||||
_save_error(error_msg)
|
_save_error(error_msg)
|
||||||
|
|
||||||
# Испускаем сигнал с ошибкой
|
# Обновляем статус online (ошибка)
|
||||||
match current_state:
|
if is_left:
|
||||||
State.REQUESTING_LEFT:
|
_update_online_status("left", false)
|
||||||
emit_signal('response_received_left', error_msg, false)
|
emit_signal('response_received_left', error_msg, false)
|
||||||
State.REQUESTING_RIGHT:
|
else:
|
||||||
emit_signal('response_received_right', error_msg, false)
|
_update_online_status("right", false)
|
||||||
|
emit_signal('response_received_right', error_msg, false)
|
||||||
|
|
||||||
_on_request_finished()
|
_on_request_finished()
|
||||||
|
|
||||||
# Сигнал от таймера - истекло время ожидания ответа
|
# Сигнал от таймера - истекло время ожидания ответа
|
||||||
func _on_timeout() -> void:
|
func _on_timeout() -> void:
|
||||||
current_state = State.WAITING_TIMEOUT
|
current_state = State.WAITING_TIMEOUT
|
||||||
http_request.cancel_request() # Отменяем текущий запрос
|
http_request.cancel_request()
|
||||||
var timeout_msg = 'Таймаут %.1f секунд - %s' % [timeout, get_result_string(HTTPRequest.Result.RESULT_TIMEOUT)]
|
var timeout_msg = 'Таймаут %.1f секунд - %s' % [timeout, get_result_string(HTTPRequest.Result.RESULT_TIMEOUT)]
|
||||||
_save_error(timeout_msg)
|
_save_error(timeout_msg)
|
||||||
|
|
||||||
# Испускаем сигнал с ошибкой таймаута
|
var is_left = (current_state == State.REQUESTING_LEFT)
|
||||||
match current_state:
|
|
||||||
State.REQUESTING_LEFT:
|
# Обновляем статус online (таймаут = offline)
|
||||||
emit_signal('response_received_left', timeout_msg, false)
|
if is_left:
|
||||||
State.REQUESTING_RIGHT:
|
_update_online_status("left", false)
|
||||||
emit_signal('response_received_right', timeout_msg, false)
|
emit_signal('response_received_left', timeout_msg, false)
|
||||||
|
else:
|
||||||
|
_update_online_status("right", false)
|
||||||
|
emit_signal('response_received_right', timeout_msg, false)
|
||||||
|
|
||||||
_on_request_finished()
|
_on_request_finished()
|
||||||
#endregion
|
#endregion
|
||||||
@@ -187,12 +227,15 @@ func _request_next(next_state: State) -> void:
|
|||||||
var error_msg = 'URL не задан'
|
var error_msg = 'URL не задан'
|
||||||
_save_error(error_msg)
|
_save_error(error_msg)
|
||||||
|
|
||||||
|
var is_left = (current_state == State.REQUESTING_LEFT)
|
||||||
|
|
||||||
# Испускаем сигнал с ошибкой
|
# Испускаем сигнал с ошибкой
|
||||||
match current_state:
|
if is_left:
|
||||||
State.REQUESTING_LEFT:
|
_update_online_status("left", false)
|
||||||
emit_signal('response_received_left', error_msg, false)
|
emit_signal('response_received_left', error_msg, false)
|
||||||
State.REQUESTING_RIGHT:
|
else:
|
||||||
emit_signal('response_received_right', error_msg, false)
|
_update_online_status("right", false)
|
||||||
|
emit_signal('response_received_right', error_msg, false)
|
||||||
|
|
||||||
_on_request_finished()
|
_on_request_finished()
|
||||||
return
|
return
|
||||||
@@ -212,12 +255,15 @@ func _request_next(next_state: State) -> void:
|
|||||||
var error_msg = 'Ошибка запроса: ' + error_string(error)
|
var error_msg = 'Ошибка запроса: ' + error_string(error)
|
||||||
_save_error(error_msg)
|
_save_error(error_msg)
|
||||||
|
|
||||||
|
var is_left = (current_state == State.REQUESTING_LEFT)
|
||||||
|
|
||||||
# Испускаем сигнал с ошибкой
|
# Испускаем сигнал с ошибкой
|
||||||
match current_state:
|
if is_left:
|
||||||
State.REQUESTING_LEFT:
|
_update_online_status("left", false)
|
||||||
emit_signal('response_received_left', error_msg, false)
|
emit_signal('response_received_left', error_msg, false)
|
||||||
State.REQUESTING_RIGHT:
|
else:
|
||||||
emit_signal('response_received_right', error_msg, false)
|
_update_online_status("right", false)
|
||||||
|
emit_signal('response_received_right', error_msg, false)
|
||||||
|
|
||||||
_on_request_finished()
|
_on_request_finished()
|
||||||
|
|
||||||
@@ -230,7 +276,6 @@ func _on_request_finished() -> void:
|
|||||||
State.REQUESTING_RIGHT, State.WAITING_TIMEOUT:
|
State.REQUESTING_RIGHT, State.WAITING_TIMEOUT:
|
||||||
# После правого борта или таймаута возвращаемся в IDLE
|
# После правого борта или таймаута возвращаемся в IDLE
|
||||||
current_state = State.IDLE
|
current_state = State.IDLE
|
||||||
print('Цикл запросов завершен')
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Сохранение результатов
|
#region Сохранение результатов
|
||||||
|
|||||||
Reference in New Issue
Block a user