public ReliableMessage CreateMessage() { ushort messageID = (messageCount == ushort.MaxValue) ? (ushort)1 : (ushort)(messageCount + 1); NetOutgoingMessage message = sender.CreateMessage(); var reliableMessage = new ReliableMessage(message, messageID); message.Write((byte)PacketTypes.ReliableMessage); message.Write(messageID); if (messageBuffer.Count > NetConfig.ReliableMessageBufferSize) { int end = messageCount - NetConfig.ReliableMessageBufferSize; int start = end - (messageBuffer.Count - NetConfig.ReliableMessageBufferSize); if (start < 0) { int wrappedStart = start + ushort.MaxValue; if (wrappedStart == 0) { wrappedStart = ushort.MaxValue; } int wrappedEnd = end + ushort.MaxValue; if (wrappedEnd == 0) { wrappedEnd = ushort.MaxValue; } for (ushort i = (ushort)wrappedStart; i <= (ushort)wrappedEnd; i++) { messageBuffer.Remove(i); if (i == ushort.MaxValue) { break; } Debug.WriteLine("removing message " + i); } } for (ushort i = (ushort)Math.Max(start, 0); i <= (ushort)Math.Max(end, 0); i++) { messageBuffer.Remove(i); if (i == ushort.MaxValue) { break; } Debug.WriteLine("removing message " + i); } } return(reliableMessage); }
public void SendMessage(ReliableMessage message, NetConnection receiver) { try { sender.SendMessage(message, receiver); } catch (Exception e) { #if DEBUG DebugConsole.ThrowError("Sending a reliable message failed", e); #endif } }
public void SendMessage(ReliableMessage message, NetConnection connection) { idSendInterval = 0.0f; idSendTimer = connection.AverageRoundtripTime; messageBuffer.Add(message.ID, message); Debug.WriteLine("sending reliable massage (id " + message.ID + ")"); if (messageCount == ushort.MaxValue) { messageCount = 0; } messageCount++; message.SaveInnerMessage(); sender.SendMessage(message.InnerMessage, connection, NetDeliveryMethod.Unreliable, 0); recipient = connection; }