У меня есть проблема, и я не знаю, как ее решить. Я работаю с 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 «В ожидании кода».
Для этого я запрограммировал две формы, один запросить номер телефона, а другой запросить код. Проблема в том, что формы не отображаются, пока сценарий не завершится, что не помогает.
Я пытался обработать поток сценария с перерыв или же вернуть в зависимости от обстоятельств, и на этот раз я получаю формы, отображаемые в нужное время, но ожидаемое выполнение скрипта заканчивается, после отправки форм он начинает выполнять весь код с самого начала, перезапуская переменные.
Во всяком случае, я надеюсь, что я объяснил правильно, и поэтому кто-то может дать мне лучший совет, потому что я действительно потерян.
Задача ещё не решена.
Других решений пока нет …