1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как проверить, включен ли сервер bungeecord?

Тема в разделе "Разработка плагинов для новичков", создана пользователем pro100koder, 25 фев 2019.

Статус темы:
Закрыта.
  1. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Хочу сделать ато-подключение на ближайший рабочий сервер в миниигре (Аля скайварс, нажал - тебя подключило к ближайшему по списку рабочему серверу). Ладно с подробностями, я не могу понять, как проверить сервер на "а он не выключен вообще?". Кода пока нет, ошибок соответственно. Просто предчутьё такое, что вдруг сервак какой-то полетит, и вся будущая цепочка порвётся.
     
  2. _Nanit_

    _Nanit_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Как-то так
    PHP:
    public static boolean isOnline(ServerInfo info){
        
    Socket socket = new Socket();

        try{
            
    socket.connect(info.getAddress());
            return 
    true;
        } catch (
    Exception e){
            return 
    false;
        }
    }
     
  3. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    А можно по-подробнее про ServerInfo? Что это? (Да, в bungeecord впервые полез, мало чего знаю)
    А, и ещё... Я ж наверное не первый, кто пытается сделать подобное автоподключение? Сам плохо умею искать, ничего не смог найти... Может быть есть тема или гайд, где делали подобное автоподключение?
     
  4. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Жесть, что за костыль) Зачем к серверу делать еще один коннект?)
     
  5. _Nanit_

    _Nanit_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Давай свой вариант. Я не против оптимизировать это
     
  6. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тпаешь игрока, если у него дисконект, банжа подставляет новый конект на следующий сервер из списка. Игроку это почти прозрачно, чуть дольше подождет телепорта и все.
     
  8. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Я тогда чёт забил на тему, ушёл работать над другими вещами, а это оставил "на потом"... Что ж, сейчас возвращаюсь к проблеме. Накодил немного:
    Код:
    public static void connectPlayer(Player p){
            ////НЕМНОГО КОДА////
            p.sendMessage(ChatColor.GREEN+"Попытка отправки на сервер "+ChatColor.GOLD+server+ChatColor.GREEN+"...");
            ByteArrayOutputStream b = new ByteArrayOutputStream();
            DataOutputStream out = new DataOutputStream(b);
            try {
                out.writeUTF("Connect");
                out.writeUTF(server);
              } catch (IOException ee) {
                ee.printStackTrace();
              }
            p.sendPluginMessage(instance, "BungeeCord", b.toByteArray());
        }
    И решил проверить, чё творится после этого:
    Код:
    @Override
        public void onPluginMessageReceived(String channel, Player p, byte[] message) {
            if(!channel.equals("BungeeCord")) {
                return;
            }
            ByteArrayDataInput in = ByteStreams.newDataInput(message);
            String subchannel = in.readUTF();
            Bukkit.getConsoleSender().sendMessage(subchannel);
        }
    И что же я вижу? [​IMG]
    -И так просто бесконечно. Не понимаю, как отследить, дисконект у игрока или нет. (В банже название серва указано, а сам серв я выключил, на который идёт попытка зайти. Вот такой вот результатец будет ждать меня в случае чего...) Что ж, так каким же образом мне отследить, был ли у игрока "дисконнект"?
     
  9. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Выяснил, что спам в консоль идёт вообще не от этого, а после перезапуска в чат игроку стало выводить "could not connect to default or fallback server ..........". Что ж, я так понял, мне нужно это самое и отследить? И как же? (В консоли ничего интересного по этому поводу)
     
  10. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    Код:
    ProxyServer.getProxy().getServer("serverName").ping(Callback<boolean, throwable>{...});
     
  11. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Это будет быстрее, чем с socket-ами возиться? (Просто я уже сделал на сокетах всё, но не очень доволен скоростью...)
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ага, пинг не сокет же, так хрень, tcp какое то :D.
     
  13. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    sarkazm?
     
  14. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    Ну по идеи да. Правильней точно
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Нет конечно, он пингуется до полного запуска уже. Игрок получит тот же дисконект пока серв не запустится полностью.
     
  16. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    Не получит игрок дисконект. Вон калбак и там обрабатываешь что должно произойти. И ещё оно в асинке
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Дык сервер на пинг ответит еще до возможности войти.
     
  18. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну и плюс твой пинг открывает и закрывает тсп коннект, так как метод часто будет вызываться, то лучше держать постоянный коннект
     
  19. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    В общем, сам всё разобрал. Сокеты лучше. А на счёт скорости - не заметил настройку "timeout" :whistle:
    Теперь-то тема закрыта.
     
Статус темы:
Закрыта.

Поделиться этой страницей