protected virtual void Dispose(bool disposing) { // If you need thread safety, use a lock around these // operations, as well as in your methods that use the resource. if (_disposed) { return; } if (disposing) { if (_listener.IsStarted) { _listener.StopListening(); } lock (_sequencingLock) { _sequencedPackets.Clear(); } lock (_receivingLock) { _receivedPackets.Clear(); } } // Indicate that the instance has been disposed. _listener = null; _receivedPackets = null; _sequencedPackets = null; _disposed = true; }
/// <summary> /// Method to handle incoming data from <c>_listener</c>. /// </summary> /// <param name="listener">The listener.</param> /// <param name="buffer">The buffer.</param> private void DataReceived(UdpListener listener, UdpBuffer buffer) { ThreadPool.QueueUserWorkItem( delegate { try { var packet = RtpPacket.FromUdpBuffer(buffer); lock (_receivingLock) { this._receivedPackets.Add(packet); //signal that we got a packets Monitor.Pulse(_receivingLock); } //if we dont care about sequence order, use these if (packet.Marker) { OnMarkerReceived(packet); } OnPacketReceived(packet); } catch (InvalidDataException ex) { OnInvalidData(buffer); Assert.Suppress(ex); } }); }
public RtpListener(IPEndPoint localEp) { _sequencedPackets = new List <RtpPacket>(); _receivedPackets = new List <RtpPacket>(); _listener = new UdpListener(localEp) { BufferSize = Constants.PacketSize, ReceiveBuffer = Constants.BufferSize, ReceiveCallback = DataReceived }; this.MaximumBufferedPackets = 25; this.VerifyPayloadType = true; }
public RtpListener(IPEndPoint localEp) { _sequencedPackets = new List<RtpPacket>(); _receivedPackets = new List<RtpPacket>(); _listener = new UdpListener(localEp) { BufferSize = Constants.PacketSize, ReceiveBuffer = Constants.BufferSize, ReceiveCallback = DataReceived }; this.MaximumBufferedPackets = 25; this.VerifyPayloadType = true; }
/// <summary> /// Method to handle incoming data from <c>_listener</c>. /// </summary> /// <param name="listener">The listener.</param> /// <param name="buffer">The buffer.</param> private void DataReceived(UdpListener listener, UdpBuffer buffer) { ThreadPool.QueueUserWorkItem( delegate { try { var packet = RtpPacket.FromUdpBuffer(buffer); lock (_receivingLock) { this._receivedPackets.Add(packet); //signal that we got a packets Monitor.Pulse(_receivingLock); } //if we dont care about sequence order, use these if (packet.Marker) OnMarkerReceived(packet); OnPacketReceived(packet); } catch (InvalidDataException ex) { OnInvalidData(buffer); Assert.Suppress(ex); } }); }
protected virtual void Dispose(bool disposing) { // If you need thread safety, use a lock around these // operations, as well as in your methods that use the resource. if (_disposed) return; if (disposing) { if (_listener.IsStarted) _listener.StopListening(); lock (_sequencingLock) { _sequencedPackets.Clear(); } lock (_receivingLock) { _receivedPackets.Clear(); } } // Indicate that the instance has been disposed. _listener = null; _receivedPackets = null; _sequencedPackets = null; _disposed = true; }