Files
utun2/tools/chatgui-android/libutun_lite/standby.h
T
evgeny b203a48063 android: standby duty-cycle в фоне — defer ping/reconnect/probe через standby_wait
standby.h/c: duty-cycle ACTIVE/SLEEP, standby_wait() будит в burst сразу,
в SLEEP — до следующего burst; notify_network_activity для раннего пробуждения.
Интеграция (по флагу UTUN_HAVE_STANDBY, десктоп без изменений):
- conn_mgr: bg_ping/candidate_ping в SLEEP defer через standby_wait
- route_connectivity: probe_node откладывается (PROBE_STATUS_DEFERRED)
- topo_group_connect: пауза между попытками — активный режим 1с, фон standby_wait
- jni_bridge/ConfigProvider/NetworkActivityMonitor: set_active + сетевая активность
- chat_setting: standby_active_sec/sleep_sec/min_sleep_sec
+ юнит-тест test_standby (31 проверок)
2026-08-14 12:28:56 +03:00

62 lines
3.0 KiB
C
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.
/*
* standby.h — режим standby с duty-cycle (активный/неактивный интервалы)
*
* Для chatgui-android: когда приложение в фоне, вместо постоянной работы
* узел периодически просыпается: ACTIVE (X сек) → SLEEP (Y сек) → ACTIVE ...
*
* Потребители периодической работы используют standby_wait(): колбэк
* срабатывает на старте следующего активного интервала, а при выходе из
* standby (приложение вернулось в форграунд) — немедленно.
*/
#ifndef STANDBY_H
#define STANDBY_H
#include "u_async.h"
#ifdef __cplusplus
extern "C" {
#endif
struct UTUN_INSTANCE;
/* Привязать модуль к uasync. Вызывается после каждого uasync_create(). */
void standby_init(struct UASYNC* ua);
/* Отмена таймеров и освобождение пула (без вызова колбэков). */
void standby_deinit(void);
/* Включить/выключить standby-режим. Логирует вход/выход (GENERAL info)
* и вызывает switch-callback. Флаг дублируется в inst->standby_enabled. */
void standby_set_enabled(struct UTUN_INSTANCE* inst, int enabled);
int standby_is_enabled(void);
/* Колбэк, вызываемый при каждом переключении standby-режима. */
void standby_set_switch_callback(void (*cb)(int enabled, void* arg), void* arg);
/* Сколько TB спать сейчас (0 = активный интервал или standby выключен). */
int standby_get_sleep_tb(void);
/* Сколько TB осталось активного режима (0 = спим или standby выключен). */
int standby_get_active_remaining_tb(void);
/* Ждёт до начала следующего активного интервала (как uasync timeout).
* При выходе из standby таймер отменяется и cb вызывается немедленно.
* Возвращает handle для standby_wait_cancel(). */
void* standby_wait(void* arg, void (*cb)(void* arg));
void standby_wait_cancel(void* handle);
/* Уведомление о внешней сетевой активности (Android ConnectivityManager).
* В фазе SLEEP после min_sleep пробуждает досрочно; иначе игнорируется.
* Вызывается на uasync-потоке. */
void standby_notify_network_activity(void);
/* Переопределить интервалы (мс), минуя chat_setting. Для тестов.
* active_ms/sleep_ms <= 0 → вернуться к chat_setting.
* min_sleep_ms может быть 0 (реагировать на сетевую активность сразу). */
void standby_set_intervals_ms(int active_ms, int sleep_ms, int min_sleep_ms);
#ifdef __cplusplus
}
#endif
#endif /* STANDBY_H */