[Java] Connect

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

NightSun

Знаменитый
Участник
Сообщения
86
Розыгрыши
0
Решения
2
Репутация
26
Реакции
26
Баллы
1 278
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
rusAcis
Господа, вопрос такой. Когда настраивал сервер с прямым IP-адресом все работало идеально.
MMOConnection.java
Код:
public MMOConnection(final SelectorThread<T> selectorThread, final Socket socket, final SelectionKey key, boolean tcpNoDelay)
    {
        _selectorThread = selectorThread;
        _socket = socket;
        _address = socket.getInetAddress();

Потом возникла необходимость сделать проброс через прокси, и получилось так что у всех игроков отображался один IP-адрес
Мне сделали заплатку в вышеуказанном файле вот такую:
MMOConnection.java
Код:
public MMOConnection(final SelectorThread<T> selectorThread, final Socket socket, final SelectionKey key, boolean tcpNoDelay, InetAddress address)
    {
        _selectorThread = selectorThread;
        _socket = socket;
        _address = address;

Теперь периодически без каких-либо ошибок в консоле отваливается геймсервер. Кто может подсказать, может в чем-то ошибку допустили

Прикрепил файл SelectorThread.java еще
 

Вложения

Решение
@NightSun, в интерфейсе таймер повесить, пусть каждые 2 минуты социалку проигрывает, и жить интереснее станет - бежишь по городу, а все танцуют, и выбрасывать не будет. :D
ну или как вариант что бы клиент слал какой-то мелкий пакет, честно говоря по клиенту я не в зуб ногой))

можешь подсказать, как это можно реализовать
первое что в голову пришло
Java:
ThreadPool.scheduleAtFixedRate(() -> {
    World.toAllOnlinePlayers(new L2GameServerPacket() {
        @Override
        protected void writeImpl() {
            writeC(0xD3); // NetPingRequest
            writeQ(System.currentTimeMillis());
        }
    });
}, 10000, 60 * 1000);
не знаю как на rusAcis, а на acis`е тот что в шаре такие методы

все это можно...
Реальный IP адрес можно передавать через пакет PlayerAuthResponse не внося изменений в ммокоре. Мануал где-то валялся на максчитерах или вот аналог от эльфа
 
Отваливается - терминейтится джава процесс или повисает ГС с загрузкой ЦПУ? или перестаёт обмениваться пакетами с игроками ? В логах тоже ничего не пишет?
MMOConnection мало, нужно место по апстриму где этот InetAddress создаётся.
Если нет ошибок, то либо эксепшн скипается, либо там бесконечный цикл, либо вызывается форсированный выход из приложения в любом месте которое меняли
 
В какой-то момент не дает зайти дальше выбора сервера. То есть ввожу логин / пароль - появляется выбор сервер и все дальше не пускает. В ГС и ЛС никаких ошибок нет. Помогает перезагрузка ГС.
 
@Rozhek, @LordWinter,
Кто-то смог бы помочь решить проблему за финансы ? :)
я тебе дал ссылку где прописана реализация передачи реального IP. Тебе надо кусочек выдернуть из всего кода(ибо сам прокси слайдер я так понимаю тебе не нужен)
 
а зачем вы переписываете гейм сервер он тут не причем
процедуру эту должен логинсервер делать
 
@LordWinter, думал беда в этом, оказалась проблема в прокси! После кучу тестов обнаружили следующие: если 2 персонажа допустим находятся на олимпиаде и ничего не делают просто стоят при этом окно l2 не активное, скажем поверх открыта папка или браузер, проходит 2-3 минуты и окна зависают (ничего нельзя делать в игре). Без прокси подобной проблемы нет, все работает как часы. Узнавал у хостера говорит: "прокси может рубить если нет трафика".

Что-то можно придумать, чтобы подобного не было ?
 
@NightSun, в интерфейсе таймер повесить, пусть каждые 2 минуты социалку проигрывает, и жить интереснее станет - бежишь по городу, а все танцуют, и выбрасывать не будет. :D
 
@NightSun, в интерфейсе таймер повесить, пусть каждые 2 минуты социалку проигрывает, и жить интереснее станет - бежишь по городу, а все танцуют, и выбрасывать не будет. :D
ну или как вариант что бы клиент слал какой-то мелкий пакет, честно говоря по клиенту я не в зуб ногой))

можешь подсказать, как это можно реализовать
первое что в голову пришло
Java:
ThreadPool.scheduleAtFixedRate(() -> {
    World.toAllOnlinePlayers(new L2GameServerPacket() {
        @Override
        protected void writeImpl() {
            writeC(0xD3); // NetPingRequest
            writeQ(System.currentTimeMillis());
        }
    });
}, 10000, 60 * 1000);
не знаю как на rusAcis, а на acis`е тот что в шаре такие методы

все это можно поставить к примеру в GameServer после полной загрузки

з.ы. - может как-то и по лучше можно придумать, но думаю сама идея понятна
 
Последнее редактирование:
Решение
@NightSun, в интерфейсе таймер повесить, пусть каждые 2 минуты социалку проигрывает, и жить интереснее станет - бежишь по городу, а все танцуют, и выбрасывать не будет. :D
либо неправильно высказался либо то ты и имел -> ответ уходит в мусор
ну или как вариант что бы клиент слал какой-то мелкий пакет, честно говоря по клиенту я не в зуб ногой))


первое что в голову пришло
Java:
ThreadPool.scheduleAtFixedRate(() -> {
    World.toAllOnlinePlayers(new L2GameServerPacket() {
        @Override
        protected void writeImpl() {
            writeC(0x99); // opcode packet
            writeQ(System.currentTimeMillis());
        }
    });
}, 10000, 1000);
не знаю как на rusAcis, а на acis`е тот что в шаре такие методы

все это можно поставить к примеру в GameServer после полной загрузки

з.ы. - может как-то и по лучше можно придумать, но думаю сама идея понятна
тут решение правильное ток уже усложняете .

Есть 3 вар которые будут предложено

и спасибо всем....
 

Похожие темы

Ответы
9
Просмотры
Назад
Сверху Снизу