You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-16 07:06:30 +09:00
Reliability fix; first sequenced message was swallowed
This commit is contained in:
@@ -84,15 +84,16 @@ namespace Lidgren.Network
|
||||
/// <summary>
|
||||
/// Sends message to server
|
||||
/// </summary>
|
||||
public void SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel)
|
||||
public bool SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel)
|
||||
{
|
||||
NetConnection serverConnection = ServerConnection;
|
||||
if (serverConnection == null)
|
||||
{
|
||||
//LogError("Cannot send message, no server connection!");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
serverConnection.SendMessage(msg, method, sequenceChannel);
|
||||
|
||||
return serverConnection.SendMessage(msg, method, sequenceChannel);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
|
||||
@@ -63,11 +63,16 @@ namespace Lidgren.Network
|
||||
int num = ((int)NetMessageType.UserReliableOrdered + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserSequenced;
|
||||
m_nextSendSequenceNumber = new int[num];
|
||||
m_lastReceivedSequenced = new ushort[num];
|
||||
for (int i = 0; i < m_lastReceivedSequenced.Length; i++)
|
||||
m_lastReceivedSequenced[i] = ushort.MaxValue;
|
||||
m_nextForceAckTime = double.MaxValue;
|
||||
}
|
||||
|
||||
internal ushort GetSendSequenceNumber(NetMessageType mtp)
|
||||
{
|
||||
if (mtp < NetMessageType.UserSequenced)
|
||||
return 0;
|
||||
|
||||
int slot = (int)mtp - (int)NetMessageType.UserSequenced;
|
||||
int retval;
|
||||
lock (m_nextSendSequenceNumber)
|
||||
|
||||
@@ -625,10 +625,23 @@ namespace Lidgren.Network
|
||||
if (msg.IsSent)
|
||||
throw new NetException("Message has already been sent!");
|
||||
|
||||
NetException.Assert(sequenceChannel >= 0 && sequenceChannel < NetConstants.NetChannelsPerDeliveryMethod, "Sequence channel must be between 0 and NetConstants.NetChannelsPerDeliveryMethod (" + NetConstants.NetChannelsPerDeliveryMethod + ")");
|
||||
|
||||
if (method <= NetDeliveryMethod.Unknown || method > NetDeliveryMethod.ReliableOrdered)
|
||||
throw new NetException("Bad delivery method!");
|
||||
switch (method)
|
||||
{
|
||||
case NetDeliveryMethod.Unreliable:
|
||||
case NetDeliveryMethod.ReliableUnordered:
|
||||
if (sequenceChannel != 0)
|
||||
throw new NetException("Delivery method " + method + " cannot use sequence channels other than 0!");
|
||||
break;
|
||||
case NetDeliveryMethod.ReliableOrdered:
|
||||
case NetDeliveryMethod.ReliableSequenced:
|
||||
case NetDeliveryMethod.UnreliableSequenced:
|
||||
NetException.Assert(sequenceChannel >= 0 && sequenceChannel < NetConstants.NetChannelsPerDeliveryMethod, "Sequence channel must be between 0 and NetConstants.NetChannelsPerDeliveryMethod (" + NetConstants.NetChannelsPerDeliveryMethod + ")");
|
||||
break;
|
||||
case NetDeliveryMethod.Unknown:
|
||||
default:
|
||||
throw new NetException("Bad delivery method!");
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_owner == null)
|
||||
return false; // we've been disposed
|
||||
|
||||
Reference in New Issue
Block a user