Exemplo n.º 1
0
        public bool TryRemove(out EventReliable value)
        {
            Node n = nodes[tail];

            if (n.Received)
            {
                value       = n.Value;
                nodes[tail] = default(Node);

                tail += 1;
                tail &= mask;

                sequenceNext  = value.Sequence + 1u;
                sequenceNext &= sequenceMask;
            }
            else
            {
                value = default(EventReliable);
            }

            return(n.Received);
        }
Exemplo n.º 2
0
        public RecvBufferAddResult TryEnqueue(EventReliable value)
        {
            int distance = NetMath.SequenceDistance(value.Sequence, sequenceNext, sequenceShift);
            int index    = (tail + distance) & mask;

            if (distance <= -nodes.Length || distance >= nodes.Length)
            {
                return(RecvBufferAddResult.OutOfBounds);
            }

            if (distance < 0)
            {
                return(RecvBufferAddResult.Old);
            }

            if (nodes[index].Received)
            {
                return(RecvBufferAddResult.AlreadyExists);
            }

            nodes[index].Received = true;
            nodes[index].Value    = value;
            return(RecvBufferAddResult.Added);
        }