У меня есть проблема, и я не знаю, как ее решить. Я работаю с PHP и библиотекой TDLib для управления API Telegram, для этого я делаю асинхронные вызовы через интерфейс JSON:
https://core.telegram.org/tdlib/getting-started#tdlib-interface
Telegram API работает через обновления. Программа получает обновления Telegram, на которые должен быть дан правильный ответ в порядке их получения. Для этого у меня есть скрипт с циклом 'while', который работает правильно для меня. Вот пример алгоритма:
void *client = td_json_client_create();
// somehow share the client with other threads, which will be able to send requests via td_json_client_send
const double WAIT_TIMEOUT = 10.0; // seconds
int is_closed = 0; // should be set to 1, when updateAuthorizationState with authorizationStateClosed is received
while (!is_closed) {
const char *result = td_json_client_receive(client, WAIT_TIMEOUT);
if (result) {
// parse the result as JSON object and process it as an incoming update or an answer to a previously sent request
}
}
td_json_client_destroy(client);
Что ж, проблема в том, что в любой момент времени статус обновления API равен «Ожидание номера телефона» , и в этот момент у пользователя должен быть запрошен номер телефона. Впоследствии, после нескольких обновлений, Telegram отправляет код на этот номер телефона, поэтому мое приложение снова должно запросить у пользователя ввести полученный код, когда статус API равен «Ожидание кода» .
Для этого я запрограммировал две формы , одну для запроса номера телефона, а другую для запроса кода. Проблема в том, что формы не отображаются, пока скрипт не завершит , что не помогает.
Я попытался обработать поток сценария с помощью break или return в зависимости от обстоятельств, и на этот раз я получаю формы, отображаемые в нужное время, но ожидаемый выполнение скрипта заканчивается, после отправки форм он начинает выполнять весь код с самого начала, перезапуская переменные.
В любом случае, я надеюсь, что я правильно объяснил, и поэтому кто-то может дать мне лучший совет, потому что я действительно потерян.