1
0
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:
lidgren
2015-01-17 16:35:01 +00:00
parent c15e4cb2c8
commit 999e113d65
7 changed files with 35 additions and 35 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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)
{ {

View File

@@ -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
} }

View File

@@ -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);
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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);