Помогите Нужно обновлять информацию в GUI в фоне, не мешая другим командам

  • Автор темы Автор темы Cheater
  • Дата начала Дата начала

Cheater

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Skriep
Всем привет. Я пишу плагин, который должен добавлять стримы в базу данных, а затем при вводе команды показывать стримы в GUI интерфейсе. Но проблема в том, что количество зрителей на стриме часто меняется, а мне надо, чтобы это количество было видно игрокам, для этого надо постоянно обновлять информацию о стримах (количество зрителей, название и т.д.), на это сервер тратит много времени, около 1.5 секунды на проверку одного стрима (ну это понятно, сервер должен соединиться с серверами ютуба). Т.е. обновлять эту информацию перед каждым открытием GUI не вариант, слишком большая задержка. Я хочу сделать так, чтобы информация обновлялась каждые секунд 30. Для этого я использую таймер на BukkitRunnable. Вроде всё работает, но если попытаться открыть GUI во время обновления информации, то придётся опять долго ждать.
Если кратко, то мне надо обновлять информацию о стримах как-нибудь в фоне, при этом не закрывая GUI и не мешая выполнению всех остальных команд. Как это можно сделать?
 
Всем привет. Я пишу плагин, который должен добавлять стримы в базу данных, а затем при вводе команды показывать стримы в GUI интерфейсе. Но проблема в том, что количество зрителей на стриме часто меняется, а мне надо, чтобы это количество было видно игрокам, для этого надо постоянно обновлять информацию о стримах (количество зрителей, название и т.д.), на это сервер тратит много времени, около 1.5 секунды на проверку одного стрима (ну это понятно, сервер должен соединиться с серверами ютуба). Т.е. обновлять эту информацию перед каждым открытием GUI не вариант, слишком большая задержка. Я хочу сделать так, чтобы информация обновлялась каждые секунд 30. Для этого я использую таймер на BukkitRunnable. Вроде всё работает, но если попытаться открыть GUI во время обновления информации, то придётся опять долго ждать.
Если кратко, то мне надо обновлять информацию о стримах как-нибудь в фоне, при этом не закрывая GUI и не мешая выполнению всех остальных команд. Как это можно сделать?
Сделать какой-то метод startUpdater (в нем делать все в runTaskTimerAsyncronously), в onEnable его запустить, и если игроков 0, можно стопать таск.
 
Всё бы хорошо, но если попытаться открыть GUI во время обновления информации, то выдаст ошибку null.
 
Немного кривовато)
После ввода команды с сылкой на стрим плагин достаёт количество зрителей и название стрима с помощью Jsoup. Если всё нормально, то добавляет стрим в бд (знаю, тут проще было бы в плагине всё держать, но такое ТЗ). При открытии GUI берутся данные из бд, затем добавляются в lore и displayname. Потом у игрока открывается GUI интерфейс (инвентарь) со всеми стримами. Ну а теперь я хочу всё это обновлять каждые 30 секунд (опять через Jsoup).
 
Немного кривовато)
После ввода команды с сылкой на стрим плагин достаёт количество зрителей и название стрима с помощью Jsoup. Если всё нормально, то добавляет стрим в бд (знаю, тут проще было бы в плагине всё держать, но такое ТЗ). При открытии GUI берутся данные из бд, затем добавляются в lore и displayname. Потом у игрока открывается GUI интерфейс (инвентарь) со всеми стримами. Ну а теперь я хочу всё это обновлять каждые 30 секунд (опять через Jsoup).
Ну и костыли, у youtube есть апи свое для этого, как у тебя вообще jsoup будет работать если он парсит ток DOM дерево, а там на ютубе страница динамически генерируются. И я чет не понял, ты когда гуи открываешь каждый раз берешь данные из бд?) И когда обновляешь данные там через свой jsoup каждые 30 секунд, я так понимаю, что ты чистишь коллекцию со стримами? Иначе там то ведь нулл не может быть, не делай этого, просто заменяй, я ж так думаю у тебя там какой-то HashMap наверно
 
Но Jsoup там работает... Очень даже хорошо работает. Да, каждый раз беру из бд. Нет, я просто заменяю. Не знаю, откуда там null, но он там есть, и это факт. А HashMap'a нету. Ещё раз повторю, я знаю, что через HashMap лучше делать, но ТЗ делать всё через бд.
Ну и костыли, у youtube есть апи свое для этого, как у тебя вообще jsoup будет работать если он парсит ток DOM дерево, а там на ютубе страница динамически генерируются. И я чет не понял, ты когда гуи открываешь каждый раз берешь данные из бд?) И когда обновляешь данные там через свой jsoup каждые 30 секунд, я так понимаю, что ты чистишь коллекцию со стримами? Иначе там то ведь нулл не может быть, не делай этого, просто заменяй, я ж так думаю у тебя там какой-то HashMap наверно
 
Я понимаю, что это костыли, но, в конце концов, это только alpha версия плагина.
 
А... я понял... ну да, тут можно через HashMap, чёт тупанул. Днём попробую переписать с ютубовским апи. Надеюсь, получится.
 
Назад
Верх