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

Статус
Закрыто для дальнейших ответов.

pro100koder

Активный участник
Пользователь
Баллы
76
Хочу сделать ато-подключение на ближайший рабочий сервер в миниигре (Аля скайварс, нажал - тебя подключило к ближайшему по списку рабочему серверу). Ладно с подробностями, я не могу понять, как проверить сервер на "а он не выключен вообще?". Кода пока нет, ошибок соответственно. Просто предчутьё такое, что вдруг сервак какой-то полетит, и вся будущая цепочка порвётся.
 
Как-то так
PHP:
public static boolean isOnline(ServerInfo info){
    Socket socket = new Socket();

    try{
        socket.connect(info.getAddress());
        return true;
    } catch (Exception e){
        return false;
    }
}
 
Как-то так
PHP:
public static boolean isOnline(ServerInfo info){
    Socket socket = new Socket();

    try{
        socket.connect(info.getAddress());
        return true;
    } catch (Exception e){
        return false;
    }
}
А можно по-подробнее про ServerInfo? Что это? (Да, в bungeecord впервые полез, мало чего знаю)
А, и ещё... Я ж наверное не первый, кто пытается сделать подобное автоподключение? Сам плохо умею искать, ничего не смог найти... Может быть есть тема или гайд, где делали подобное автоподключение?
 
Как-то так
PHP:
public static boolean isOnline(ServerInfo info){
    Socket socket = new Socket();

    try{
        socket.connect(info.getAddress());
        return true;
    } catch (Exception e){
        return false;
    }
}
Жесть, что за костыль) Зачем к серверу делать еще один коннект?)
 
Тпаешь игрока, если у него дисконект, банжа подставляет новый конект на следующий сервер из списка. Игроку это почти прозрачно, чуть дольше подождет телепорта и все.
 
Тпаешь игрока, если у него дисконект, банжа подставляет новый конект на следующий сервер из списка. Игроку это почти прозрачно, чуть дольше подождет телепорта и все.
Я тогда чёт забил на тему, ушёл работать над другими вещами, а это оставил "на потом"... Что ж, сейчас возвращаюсь к проблеме. Накодил немного:
Код:
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);
    }
И что же я вижу?
n60ve9

-И так просто бесконечно. Не понимаю, как отследить, дисконект у игрока или нет. (В банже название серва указано, а сам серв я выключил, на который идёт попытка зайти. Вот такой вот результатец будет ждать меня в случае чего...) Что ж, так каким же образом мне отследить, был ли у игрока "дисконнект"?
 
Я тогда чёт забил на тему, ушёл работать над другими вещами, а это оставил "на потом"... Что ж, сейчас возвращаюсь к проблеме. Накодил немного:
Код:
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);
    }
И что же я вижу?
n60ve9

-И так просто бесконечно. Не понимаю, как отследить, дисконект у игрока или нет. (В банже название серва указано, а сам серв я выключил, на который идёт попытка зайти. Вот такой вот результатец будет ждать меня в случае чего...) Что ж, так каким же образом мне отследить, был ли у игрока "дисконнект"?
Выяснил, что спам в консоль идёт вообще не от этого, а после перезапуска в чат игроку стало выводить "could not connect to default or fallback server ..........". Что ж, я так понял, мне нужно это самое и отследить? И как же? (В консоли ничего интересного по этому поводу)
 
Нет конечно, он пингуется до полного запуска уже. Игрок получит тот же дисконект пока серв не запустится полностью.
Не получит игрок дисконект. Вон калбак и там обрабатываешь что должно произойти. И ещё оно в асинке
 
Ну и плюс твой пинг открывает и закрывает тсп коннект, так как метод часто будет вызываться, то лучше держать постоянный коннект
 
Это будет быстрее, чем с socket-ами возиться? (Просто я уже сделал на сокетах всё, но не очень доволен скоростью...)
В общем, сам всё разобрал. Сокеты лучше. А на счёт скорости - не заметил настройку "timeout" 😗
Теперь-то тема закрыта.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх