You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-16 15:16:33 +09:00
Major refactoring of sending messages to multiple recipients
This commit is contained in:
50
Lidgren.Network/NetSending.cs
Normal file
50
Lidgren.Network/NetSending.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Lidgren.Network
|
||||
{
|
||||
[DebuggerDisplay("MessageType={MessageType} SequenceNumber={SequenceNumber} NumSends={NumSends}")]
|
||||
internal sealed class NetSending
|
||||
{
|
||||
public NetOutgoingMessage Message;
|
||||
public IPEndPoint Recipient;
|
||||
public NetMessageType MessageType;
|
||||
public ushort SequenceNumber;
|
||||
public double NextResend;
|
||||
public int NumSends; // how many times has this sending been sent
|
||||
|
||||
public int FragmentGroupId;
|
||||
public int FragmentNumber;
|
||||
public int FragmentTotalCount;
|
||||
|
||||
public NetSending(NetOutgoingMessage msg, NetMessageType tp, ushort sequenceNumber)
|
||||
{
|
||||
Message = msg;
|
||||
MessageType = tp;
|
||||
SequenceNumber = sequenceNumber;
|
||||
}
|
||||
|
||||
internal void SetNextResend(NetConnection conn)
|
||||
{
|
||||
float baseDelay;
|
||||
switch(NumSends)
|
||||
{
|
||||
case 0: baseDelay = 0.025f; break;
|
||||
case 1: baseDelay = 0.05f; break;
|
||||
case 2: baseDelay = 0.15f; break;
|
||||
case 3: baseDelay = 0.3f; break;
|
||||
default:
|
||||
baseDelay = (float)(NumSends - 3); // 4: 1 second, 5: 2 seconds, 6: 3 seconds etc
|
||||
break;
|
||||
}
|
||||
|
||||
float rttMultiplier = 1.15f + (0.15f * NumSends);
|
||||
|
||||
float totalDelay = baseDelay + (conn.AverageRoundtripTime * rttMultiplier);
|
||||
|
||||
NextResend = NetTime.Now + totalDelay;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user