Core/Movement: Add time synchronisation (Needs tested)

Port From (https://github.com/TrinityCore/TrinityCore/commit/c19a4db1c12b8864d6c486ee8e2f0e058fb4155a)
This commit is contained in:
hondacrx
2021-12-02 22:34:04 -05:00
parent f5695f0cf2
commit a96fe1e47f
11 changed files with 586 additions and 75 deletions
+4
View File
@@ -220,7 +220,11 @@ namespace Game.Networking
public uint GetOpcode() { return opcode; }
public DateTime GetReceivedTime() { return m_receivedTime; }
public void SetReceiveTime(DateTime receivedTime) { m_receivedTime = receivedTime; }
uint opcode;
DateTime m_receivedTime; // only set for a specific set of opcodes, for performance reasons.
}
public class PacketHeader
@@ -275,6 +275,8 @@ namespace Game.Networking.Packets
ClientTime = _worldPacket.ReadUInt32();
}
public DateTime GetReceivedTime() { return _worldPacket.GetReceivedTime(); }
public uint ClientTime; // Client ticks in ms
public uint SequenceIndex; // Same index as in request
}
+3 -3
View File
@@ -340,6 +340,9 @@ namespace Game.Networking
break;
}
if (opcode == ClientOpcodes.TimeSyncResponse)
packet.SetReceiveTime(DateTime.Now);
// Our Idle timer will reset on any non PING opcodes on login screen, allowing us to catch people idling.
_worldSession.ResetTimeOutTime(false);
@@ -812,10 +815,7 @@ namespace Game.Networking
lock (_worldSessionLock)
{
if (_worldSession != null)
{
_worldSession.SetLatency(ping.Latency);
_worldSession.ResetClientTimeDelay();
}
else
{
Log.outError(LogFilter.Network, "WorldSocket:HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = {0}", GetRemoteIpAddress());