public void Queue(Event ev) { if (ev.Reliability == ReliabilityModes.Unreliable) { // push on unreliable send queue unreliableSend.Add(EventUnreliable.Wrap(ev)); // incr refs! ev.IncrementRefs(); } else { if (reliableOrderedSend.TryEnqueue(EventReliable.Wrap(ev))) { ev.IncrementRefs(); } else { NetLog.Warn("The reliable-ordered event queue for {0} is full, disconnecting", connection); connection.Disconnect(); } } }
public override void Read(Packet packet) { int startPtr = packet.Position; while (packet.ReadStopMarker()) { uint sequence = 0; Event ev = ReadEvent(packet, ref sequence); NetLog.Debug("recv event {0}", ev); if (ev.Reliability == ReliabilityModes.Unreliable) { EventDispatcher.Received(ev); } else { switch (reliableOrderedRecv.TryEnqueue(EventReliable.Wrap(ev, sequence))) { case RecvBufferAddResult.Old: case RecvBufferAddResult.OutOfBounds: case RecvBufferAddResult.AlreadyExists: NetLog.Debug("FAILED"); //ev.DecrementRefs(); break; } } } EventReliable reliable; while (reliableOrderedRecv.TryRemove(out reliable)) { EventDispatcher.Received(reliable.NetworkEvent); } packet.Stats.EventBits = packet.Position - startPtr; }