Я делаю клиент для Telegram на Java с использованием официальной библиотеки TDLib, т.е. ее binding'а для Java. Пример, скопированный в мой проект из официального репозитория библиотеки, работает без нареканий.
Задача состоит в том, чтобы отслеживать появление новых чатов (например, кто-то пользователей создал новый групповой чат на N-человек и пригласил в него меня в том числе). Реализовать это несложно. Достаточно в цикле делать запрос вида (или по расписанию с использованием аннотации @Scheduled
в Spring):
client.send(new TdApi.GetChats(
offsetOrder,
offsetChatId,
limit - chatList.size()),
() -> { ... });
Но мне хотелось бы не опрашивать сервер на предмет появления новых чатов, а получать уведомления о таких событиях, что-нибудь наподобие:
client.subscribe(EventType.NewChat, () -> { ... } , () -> { ... });
Я пробовал искать подходящие методы в Java-классах, но безуспешно (потому что Javadoc-ов равно как и нормально названных параметров нет - все же это binding к библиотеке, написанной на C). В собственно нативном классе Client я не нашел упоминания о получении уведомлений.
Подскажите, пожалуйста, возможно ли это в принципе? И в каком направлении копать?
P.S. Просьба не пинать сильно. Я гуглил на эту тему. Но основном результаты о Telegram Bot API. У меня же задача сделать именно клиента (который будет работать на сервере и складывать активность Telegram в БД PostgreSQL).
Все оказалось просто.
В упомянутом ранее примере из официального репозитория как раз используются обновления, т.е. не нужно "пинговать" сервер на пример новых событий. Их обработчик указывается при создании клиента:
client = Client.create(new TelegramService.UpdatesHandler(), null, null);
В UpdatesHandler
'e уже был код, который следит за появлением нового чата:
@Override
public void onResult(TdApi.Object object) {
switch (object.getConstructor()) {
// ...
case TdApi.UpdateNewChat.CONSTRUCTOR: {
TdApi.UpdateNewChat updateNewChat = (TdApi.UpdateNewChat) object;
TdApi.Chat chat = updateNewChat.chat;
synchronized (chat) {
chats.put(chat.id, chat);
long order = chat.order;
chat.order = 0;
setChatOrder(chat, order);
}
break;
}
// ...
Можно также обрабатывать другие события, например, следить за входящими сообщениями:
case TdApi.UpdateNewMessage.CONSTRUCTOR:
System.out.println(">>> TdApi.UpdateNewMessage.CONSTRUCTOR()");
break;
Более подробно об этом написано в документации в разделе Handling updates.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть ли какой способ проверить что бин был создан? с помощью аннотации а не простым if
Проблема в том, что от сюда http://siteru/css/table
Подскажите пожалуйста с помощью чего и как сделать такоеЗадание чтоб на сайте при нажатии на кнопку показало одну из 3 случайных картинок,...