You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-18 16:16:35 +09:00
Changed internal representation of time in a bunch of places from float to double
This commit is contained in:
@@ -12,7 +12,7 @@ namespace Lidgren.Network
|
|||||||
internal string m_disconnectMessage;
|
internal string m_disconnectMessage;
|
||||||
internal bool m_connectionInitiator;
|
internal bool m_connectionInitiator;
|
||||||
internal NetIncomingMessage m_remoteHailMessage;
|
internal NetIncomingMessage m_remoteHailMessage;
|
||||||
internal float m_lastHandshakeSendTime;
|
internal double m_lastHandshakeSendTime;
|
||||||
internal int m_handshakeAttempts;
|
internal int m_handshakeAttempts;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -124,7 +124,7 @@ namespace Lidgren.Network
|
|||||||
m_handshakeAttempts = 0;
|
m_handshakeAttempts = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SendConnect(float now)
|
internal void SendConnect(double now)
|
||||||
{
|
{
|
||||||
m_peer.VerifyNetworkThread();
|
m_peer.VerifyNetworkThread();
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ namespace Lidgren.Network
|
|||||||
om.m_messageType = NetMessageType.Connect;
|
om.m_messageType = NetMessageType.Connect;
|
||||||
om.Write(m_peerConfiguration.AppIdentifier);
|
om.Write(m_peerConfiguration.AppIdentifier);
|
||||||
om.Write(m_peer.m_uniqueIdentifier);
|
om.Write(m_peer.m_uniqueIdentifier);
|
||||||
om.Write(now);
|
om.Write((float)now);
|
||||||
|
|
||||||
WriteLocalHail(om);
|
WriteLocalHail(om);
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ namespace Lidgren.Network
|
|||||||
SetStatus(NetConnectionStatus.InitiatedConnect, "Locally requested connect");
|
SetStatus(NetConnectionStatus.InitiatedConnect, "Locally requested connect");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SendConnectResponse(float now, bool onLibraryThread)
|
internal void SendConnectResponse(double now, bool onLibraryThread)
|
||||||
{
|
{
|
||||||
if (onLibraryThread)
|
if (onLibraryThread)
|
||||||
m_peer.VerifyNetworkThread();
|
m_peer.VerifyNetworkThread();
|
||||||
@@ -159,7 +159,7 @@ namespace Lidgren.Network
|
|||||||
om.m_messageType = NetMessageType.ConnectResponse;
|
om.m_messageType = NetMessageType.ConnectResponse;
|
||||||
om.Write(m_peerConfiguration.AppIdentifier);
|
om.Write(m_peerConfiguration.AppIdentifier);
|
||||||
om.Write(m_peer.m_uniqueIdentifier);
|
om.Write(m_peer.m_uniqueIdentifier);
|
||||||
om.Write(now);
|
om.Write((float)now);
|
||||||
|
|
||||||
WriteLocalHail(om);
|
WriteLocalHail(om);
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ namespace Lidgren.Network
|
|||||||
{
|
{
|
||||||
public partial class NetConnection
|
public partial class NetConnection
|
||||||
{
|
{
|
||||||
private float m_sentPingTime;
|
private double m_sentPingTime;
|
||||||
private int m_sentPingNumber;
|
private int m_sentPingNumber;
|
||||||
private float m_averageRoundtripTime;
|
private double m_averageRoundtripTime;
|
||||||
private float m_timeoutDeadline = float.MaxValue;
|
private double m_timeoutDeadline = double.MaxValue;
|
||||||
|
|
||||||
// local time value + m_remoteTimeOffset = remote time value
|
// local time value + m_remoteTimeOffset = remote time value
|
||||||
internal double m_remoteTimeOffset;
|
internal double m_remoteTimeOffset;
|
||||||
@@ -15,7 +15,7 @@ namespace Lidgren.Network
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current average roundtrip time in seconds
|
/// Gets the current average roundtrip time in seconds
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float AverageRoundtripTime { get { return m_averageRoundtripTime; } }
|
public float AverageRoundtripTime { get { return (float)m_averageRoundtripTime; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Time offset between this peer and the remote peer
|
/// Time offset between this peer and the remote peer
|
||||||
@@ -46,13 +46,13 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
internal void InitializePing()
|
internal void InitializePing()
|
||||||
{
|
{
|
||||||
float now = (float)NetTime.Now;
|
double now = NetTime.Now;
|
||||||
|
|
||||||
// randomize ping sent time (0.25 - 1.0 x ping interval)
|
// randomize ping sent time (0.25 - 1.0 x ping interval)
|
||||||
m_sentPingTime = now;
|
m_sentPingTime = now;
|
||||||
m_sentPingTime -= (m_peerConfiguration.PingInterval * 0.25f); // delay ping for a little while
|
m_sentPingTime -= (m_peerConfiguration.PingInterval * 0.25f); // delay ping for a little while
|
||||||
m_sentPingTime -= (MWCRandom.Instance.NextSingle() * (m_peerConfiguration.PingInterval * 0.75f));
|
m_sentPingTime -= (MWCRandom.Instance.NextSingle() * (m_peerConfiguration.PingInterval * 0.75f));
|
||||||
m_timeoutDeadline = now + (m_peerConfiguration.m_connectionTimeout * 2.0f); // initially allow a little more time
|
m_timeoutDeadline = now + (m_peerConfiguration.m_connectionTimeout * 2.0); // initially allow a little more time
|
||||||
|
|
||||||
// make it better, quick :-)
|
// make it better, quick :-)
|
||||||
SendPing();
|
SendPing();
|
||||||
@@ -64,7 +64,7 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
m_sentPingNumber++;
|
m_sentPingNumber++;
|
||||||
|
|
||||||
m_sentPingTime = (float)NetTime.Now;
|
m_sentPingTime = NetTime.Now;
|
||||||
NetOutgoingMessage om = m_peer.CreateMessage(1);
|
NetOutgoingMessage om = m_peer.CreateMessage(1);
|
||||||
om.Write((byte)m_sentPingNumber); // truncating to 0-255
|
om.Write((byte)m_sentPingNumber); // truncating to 0-255
|
||||||
om.m_messageType = NetMessageType.Ping;
|
om.m_messageType = NetMessageType.Ping;
|
||||||
@@ -95,7 +95,7 @@ namespace Lidgren.Network
|
|||||||
m_peer.Recycle(om);
|
m_peer.Recycle(om);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ReceivedPong(float now, int pongNumber, float remoteSendTime)
|
internal void ReceivedPong(double now, int pongNumber, float remoteSendTime)
|
||||||
{
|
{
|
||||||
if ((byte)pongNumber != (byte)m_sentPingNumber)
|
if ((byte)pongNumber != (byte)m_sentPingNumber)
|
||||||
{
|
{
|
||||||
@@ -105,7 +105,7 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
m_timeoutDeadline = now + m_peerConfiguration.m_connectionTimeout;
|
m_timeoutDeadline = now + m_peerConfiguration.m_connectionTimeout;
|
||||||
|
|
||||||
float rtt = now - m_sentPingTime;
|
double rtt = now - m_sentPingTime;
|
||||||
NetException.Assert(rtt >= 0);
|
NetException.Assert(rtt >= 0);
|
||||||
|
|
||||||
double diff = (remoteSendTime + (rtt / 2.0)) - now;
|
double diff = (remoteSendTime + (rtt / 2.0)) - now;
|
||||||
@@ -118,14 +118,14 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_averageRoundtripTime = (m_averageRoundtripTime * 0.7f) + (float)(rtt * 0.3f);
|
m_averageRoundtripTime = (m_averageRoundtripTime * 0.7) + (rtt * 0.3);
|
||||||
|
|
||||||
m_remoteTimeOffset = ((m_remoteTimeOffset * (double)(m_sentPingNumber - 1)) + diff) / (double)m_sentPingNumber;
|
m_remoteTimeOffset = ((m_remoteTimeOffset * (double)(m_sentPingNumber - 1)) + diff) / (double)m_sentPingNumber;
|
||||||
m_peer.LogVerbose("Updated average roundtrip time to " + NetTime.ToReadable(m_averageRoundtripTime) + ", remote time to " + (now + m_remoteTimeOffset) + " (ie. diff " + m_remoteTimeOffset + ")");
|
m_peer.LogVerbose("Updated average roundtrip time to " + NetTime.ToReadable(m_averageRoundtripTime) + ", remote time to " + (now + m_remoteTimeOffset) + " (ie. diff " + m_remoteTimeOffset + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
// update resend delay for all channels
|
// update resend delay for all channels
|
||||||
float resendDelay = GetResendDelay();
|
double resendDelay = GetResendDelay();
|
||||||
foreach (var chan in m_sendChannels)
|
foreach (var chan in m_sendChannels)
|
||||||
{
|
{
|
||||||
var rchan = chan as NetReliableSenderChannel;
|
var rchan = chan as NetReliableSenderChannel;
|
||||||
|
|||||||
@@ -70,12 +70,12 @@ namespace Lidgren.Network
|
|||||||
public NetOutgoingMessage LocalHailMessage { get { return m_localHailMessage; } }
|
public NetOutgoingMessage LocalHailMessage { get { return m_localHailMessage; } }
|
||||||
|
|
||||||
// gets the time before automatically resending an unacked message
|
// gets the time before automatically resending an unacked message
|
||||||
internal float GetResendDelay()
|
internal double GetResendDelay()
|
||||||
{
|
{
|
||||||
float avgRtt = m_averageRoundtripTime;
|
double avgRtt = m_averageRoundtripTime;
|
||||||
if (avgRtt <= 0)
|
if (avgRtt <= 0)
|
||||||
avgRtt = 0.1f; // "default" resend is based on 100 ms roundtrip time
|
avgRtt = 0.1; // "default" resend is based on 100 ms roundtrip time
|
||||||
return 0.025f + (avgRtt * 2.1f); // 25 ms + double rtt
|
return 0.025 + (avgRtt * 2.1); // 25 ms + double rtt
|
||||||
}
|
}
|
||||||
|
|
||||||
internal NetConnection(NetPeer peer, IPEndPoint remoteEndPoint)
|
internal NetConnection(NetPeer peer, IPEndPoint remoteEndPoint)
|
||||||
@@ -115,7 +115,7 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
if (m_status == NetConnectionStatus.Connected)
|
if (m_status == NetConnectionStatus.Connected)
|
||||||
{
|
{
|
||||||
m_timeoutDeadline = (float)NetTime.Now + m_peerConfiguration.m_connectionTimeout;
|
m_timeoutDeadline = NetTime.Now + m_peerConfiguration.m_connectionTimeout;
|
||||||
m_peer.LogVerbose("Timeout deadline initialized to " + m_timeoutDeadline);
|
m_peer.LogVerbose("Timeout deadline initialized to " + m_timeoutDeadline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ namespace Lidgren.Network
|
|||||||
{
|
{
|
||||||
m_peer.VerifyNetworkThread();
|
m_peer.VerifyNetworkThread();
|
||||||
|
|
||||||
float now = (float)NetTime.Now;
|
double now = NetTime.Now;
|
||||||
|
|
||||||
switch (tp)
|
switch (tp)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Lidgren.Network
|
|||||||
private NetBitVector m_receivedAcks;
|
private NetBitVector m_receivedAcks;
|
||||||
internal NetStoredReliableMessage[] m_storedMessages;
|
internal NetStoredReliableMessage[] m_storedMessages;
|
||||||
|
|
||||||
internal float m_resendDelay;
|
internal double m_resendDelay;
|
||||||
|
|
||||||
internal override int WindowSize { get { return m_windowSize; } }
|
internal override int WindowSize { get { return m_windowSize; } }
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call this regularely
|
// call this regularely
|
||||||
internal override void SendQueuedMessages(float now)
|
internal override void SendQueuedMessages(double now)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// resends
|
// resends
|
||||||
@@ -69,7 +69,7 @@ namespace Lidgren.Network
|
|||||||
if (om == null)
|
if (om == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
float t = m_storedMessages[i].LastSent;
|
double t = m_storedMessages[i].LastSent;
|
||||||
if (t > 0 && (now - t) > m_resendDelay)
|
if (t > 0 && (now - t) > m_resendDelay)
|
||||||
{
|
{
|
||||||
// deduce sequence number
|
// deduce sequence number
|
||||||
@@ -110,7 +110,7 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ExecuteSend(float now, NetOutgoingMessage message)
|
private void ExecuteSend(double now, NetOutgoingMessage message)
|
||||||
{
|
{
|
||||||
int seqNr = m_sendStart;
|
int seqNr = m_sendStart;
|
||||||
m_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers;
|
m_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers;
|
||||||
@@ -149,7 +149,7 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
// remoteWindowStart is remote expected sequence number; everything below this has arrived properly
|
// remoteWindowStart is remote expected sequence number; everything below this has arrived properly
|
||||||
// seqNr is the actual nr received
|
// seqNr is the actual nr received
|
||||||
internal override void ReceiveAcknowledge(float now, int seqNr)
|
internal override void ReceiveAcknowledge(double now, int seqNr)
|
||||||
{
|
{
|
||||||
// late (dupe), on time or early ack?
|
// late (dupe), on time or early ack?
|
||||||
int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);
|
int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);
|
||||||
@@ -237,7 +237,7 @@ namespace Lidgren.Network
|
|||||||
NetOutgoingMessage rmsg = m_storedMessages[slot].Message;
|
NetOutgoingMessage rmsg = m_storedMessages[slot].Message;
|
||||||
//m_connection.m_peer.LogVerbose("Resending #" + rnr + " (" + rmsg + ")");
|
//m_connection.m_peer.LogVerbose("Resending #" + rnr + " (" + rmsg + ")");
|
||||||
|
|
||||||
if (now - m_storedMessages[slot].LastSent < (m_resendDelay * 0.35f))
|
if (now - m_storedMessages[slot].LastSent < (m_resendDelay * 0.35))
|
||||||
{
|
{
|
||||||
// already resent recently
|
// already resent recently
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ namespace Lidgren.Network
|
|||||||
internal abstract int GetAllowedSends();
|
internal abstract int GetAllowedSends();
|
||||||
|
|
||||||
internal abstract NetSendResult Enqueue(NetOutgoingMessage message);
|
internal abstract NetSendResult Enqueue(NetOutgoingMessage message);
|
||||||
internal abstract void SendQueuedMessages(float now);
|
internal abstract void SendQueuedMessages(double now);
|
||||||
internal abstract void Reset();
|
internal abstract void Reset();
|
||||||
internal abstract void ReceiveAcknowledge(float now, int sequenceNumber);
|
internal abstract void ReceiveAcknowledge(double now, int sequenceNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ namespace Lidgren.Network
|
|||||||
internal struct NetStoredReliableMessage
|
internal struct NetStoredReliableMessage
|
||||||
{
|
{
|
||||||
public int NumSent;
|
public int NumSent;
|
||||||
public float LastSent;
|
public double LastSent;
|
||||||
public NetOutgoingMessage Message;
|
public NetOutgoingMessage Message;
|
||||||
public int SequenceNumber;
|
public int SequenceNumber;
|
||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
NumSent = 0;
|
NumSent = 0;
|
||||||
LastSent = 0;
|
LastSent = 0.0;
|
||||||
Message = null;
|
Message = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call this regularely
|
// call this regularely
|
||||||
internal override void SendQueuedMessages(float now)
|
internal override void SendQueuedMessages(double now)
|
||||||
{
|
{
|
||||||
int num = GetAllowedSends();
|
int num = GetAllowedSends();
|
||||||
if (num < 1)
|
if (num < 1)
|
||||||
@@ -91,7 +91,7 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
// remoteWindowStart is remote expected sequence number; everything below this has arrived properly
|
// remoteWindowStart is remote expected sequence number; everything below this has arrived properly
|
||||||
// seqNr is the actual nr received
|
// seqNr is the actual nr received
|
||||||
internal override void ReceiveAcknowledge(float now, int seqNr)
|
internal override void ReceiveAcknowledge(double now, int seqNr)
|
||||||
{
|
{
|
||||||
// late (dupe), on time or early ack?
|
// late (dupe), on time or early ack?
|
||||||
int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);
|
int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);
|
||||||
|
|||||||
Reference in New Issue
Block a user