Пример #1
0
        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);
        }
Пример #2
0
        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
            }
        }
Пример #3
0
        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;
        }