Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Дюп - двойная сессия
SouthBridge Написал:Интереса ради я нагуглил репозиторий aCis, но вот только там по сути никакого таймлайна - репа с чистого листа с 1 коммитом от 29 января.
Я не там смотрю? Smile

Ну как бы, я так выразился, не совсем корректно. Smile

Вот:
Родился, живу и когда-нибудь умру.
Ответ
То что у aCiS - обходится. К сожалению
Ответ
heaven Написал:То что у aCiS - обходится. К сожалению

А что там у acis? Приведите diff в студию, попробуем закрыть Smile
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
В этой теме, выкладывали
Ответ
heaven Написал:В этой теме, выкладывали

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

Ну и поставьте себе еще таймаут на серверном сокете. Так, чисто на всякий случай, что бы школьники клиент не суспендили надолго при попытках отладки/инжекта/...

P.S. дифф так и не нашел
P.P.S. и вообще, у меня большой вопрос - как на сервере существуют два инстанса одного и того же игрока? не иначе, как квантовое копирование и суперпозиция Big Grin
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
heaven Написал:То что у aCiS - обходится. К сожалению

Опишите последовательно как обходить. Что-то я не пойму.
Родился, живу и когда-нибудь умру.
Ответ
Pointer*Rage Написал:P.S. дифф так и не нашел
P.P.S. и вообще, у меня большой вопрос - как на сервере существуют два инстанса одного и того же игрока? не иначе, как квантовое копирование и суперпозиция Big Grin
Быдлокодинг и деградация.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
Обновление aCis Rev.323:

Было: net.sf.l2j.gameserver.LoginServerThread.java
[SRC="java"] public void addGameServerLogin(String account, L2GameClient client)
{
_accountsInGameServer.put(account, client);
}[/SRC]


Было: net.sf.l2j.gameserver.network.clientpackets.AuthLogin.java
[SRC="java"] @Override
protected void runImpl()
{
final SessionKey key = new SessionKey(_loginKey1, _loginKey2, _playKey1, _playKey2);
if (Config.DEBUG)
_log.info("User:" + _loginName + "key:" + key);

final L2GameClient client = getClient();
if (client.getAccountName() == null)
{
client.setAccountName(_loginName);
LoginServerThread.getInstance().addGameServerLogin(_loginName, client);
LoginServerThread.getInstance().addWaitingClientAndSendRequest(_loginName, client, key);
}
}[/SRC]


Стало: net.sf.l2j.gameserver.LoginServerThread.java
[SRC="java"] public boolean addGameServerLogin(String account, L2GameClient client)
{
if (_accountsInGameServer.containsKey(account))
return false;

return _accountsInGameServer.put(account, client) == null;
}[/SRC]


Стало: net.sf.l2j.gameserver.network.clientpackets.AuthLogin.java
[SRC="java"] @Override
protected void runImpl()
{
if (getClient().getAccountName() == null)
{
if (LoginServerThread.getInstance().addGameServerLogin(_loginName, getClient()))
{
getClient().setAccountName(_loginName);
LoginServerThread.getInstance().addWaitingClientAndSendRequest(_loginName, getClient(), new SessionKey(_loginKey1, _loginKey2, _playKey1, _playKey2));
}
else
getClient().close((L2GameServerPacket) null);
}
}[/SRC]


Этого разве недостаточно для фикса двойной сессии? :confused:

Вот оригинал патча [L2J 6477]. Спасибо за репорт постояльцу ЗГ. Smile
Родился, живу и когда-нибудь умру.
Ответ
Donatte Написал:Этого разве недостаточно для фикса двойной сессии? :confused:
Сходу можно сказать что достаточно. Лишь бы удаление из списка работало корректно и в своё время и не вызывалось по 2-3+ раза при дисконнекте (вот и лазейка!) как при некоторых обстоятельствах в оригинальной Lucera.

Тем временем я заглянул в L2j Frozen.. там удаления из мэпа акк/клиент вообще не происходит. При коннекте вытесняется предыдущий клиент, а если он активен - выпиливается коннект.
Неплохо конечно, но это минус как никак - утечка памяти.

p.s А еще меня немного смущает, что поиск акка\клиента в цикле по _waitingClients идёт без break при нахождении совпадения. Раньше в L2J был мэп, теперь просто список с таким приколом. В чем "финт" то?
Ответ
Простите за вопрос немного не в тему, но всё же, какую сборку из Interlude, вы можете посоветовать(платную или бесплатную, тут роли не играет), в которой реализация по максимому+ прикрыта такая проблема, как двойная сессия? Ещё раз повторю желательно с максимально реализацией на сегодняшний день
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)