PDA

Просмотр полной версии : SMSG_PONG (4.0.6а)


HuntsMan
13.03.2011, 11:37
Никак не найду номер этого пакета. Подскажите люди добрые :)

Chameleon
23.03.2011, 10:12
Мне кажется, что опкод должен быть: 0x0A01B и обрабатываться в HandleAuthOpcodes. Однако с этим опкодом пинг в клиенте все равно не показывается. В консоли клиента же поялвяется сообщение "Received pong with old sequence". Так что опкод я думаю верный. Проблема похоже в том, что сервер все время получает CMSG_PING с нулевым ping значением, вместо инкрементирующегося. Клиент пытается послать пинги на все 3 потенциальных соединения (home, world и auth?), но т.к. соедниение открыто только одно видимо клиента плющит.

HuntsMan
25.03.2011, 18:19
Мне кажется, что опкод должен быть: 0x0A01B и обрабатываться в HandleAuthOpcodes. Однако с этим опкодом пинг в клиенте все равно не показывается. В консоли клиента же поялвяется сообщение "Received pong with old sequence". Так что опкод я думаю верный. Проблема похоже в том, что сервер все время получает CMSG_PING с нулевым ping значением, вместо инкрементирующегося. Клиент пытается послать пинги на все 3 потенциальных соединения (home, world и auth?), но т.к. соедниение открыто только одно видимо клиента плющит.
Скорее всего. В 4.0.3 пинг клиент нормально посылал, я проверял :)

add:
Packet SMSG, CMSG_PING (1614), len 8, Flags: None
╔════════╦══════ ════════════════ ════════════════ ═════════╦══════ ═════════╗
║ OFFSET ║ 0 1 2 3 4 5 6 7 8 9 A B C D E F ║0123456789ABCDEF║
╠════════╬═══════ ════════════════ ════════════════ ════════╬═══════ ════════╣
║00000000║ 00 00 00 00 01 00 00 00 -- -- -- -- -- -- -- -- ║................║
╚════════╩══════ ════════════════ ════════════════ ═════════╩══════ ═════════╝

Как я понял, он на каждое соединение шлет свой пакет с пингом, а там уже ждет ответа. Значит поидее он должен слушать этот пакет с любого содеинения

HuntsMan
26.03.2011, 07:10
http://filebeam.com/30ef1ebd6c840cac579448f19f4d8fe9.jpg
Йхууууу :)

--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -1091,8 +1091,10 @@ int WorldSocket::HandlePing (WorldPacket

if (m_Session)
m_Session->SetLatency(latency);

- WorldPacket packet (SMSG_PONG, 4, true);
- packet << sequence;
+ WorldPacket packet (SMSG_PONG, 4);
+ packet << sequence++;
return SendPacket (packet);
}

Chameleon
26.03.2011, 09:26
Что-то я не понял, как этот патч работает.
У меня пинг заработал, когда я поменял местами чтение latency и sequence из клиентского пакета.

LordJZ
26.03.2011, 19:07
+ packet << sequence++;
return SendPacket (packet);Ага, пост-инкрементировать локальную переменную перед выходом из функции.

HuntsMan
26.03.2011, 19:27
Магия какая-то :) Клиентский пакет я поправил ещё на версии 4.0.3, но вот почему пинг стал отображатся после этого все равно не рабочего куска кода я вообще не понимаю..