public virtual TimeSpan?Update(MetadataState state, TimeSpan position) { bool lockTaken = false; object obj; try { Monitor.Enter(obj = this._lock, ref lockTaken); this._position = position; TimeSpan? nullable1 = this.ProcessPendingTracks(); IStreamMetadata streamMetadata = this._metadataState.StreamMetadata; ISegmentMetadata segmentMetadata = this._metadataState.SegmentMetadata; state.SegmentMetadata = segmentMetadata; state.SegmentTimestamp = this._metadataState.SegmentTimestamp; state.StreamMetadata = streamMetadata; state.StreamTimestamp = this._metadataState.StreamTimestamp; state.TrackMetadata = this._metadataState.TrackMetadata; state.ConfigurationMetadata = this._metadataState.ConfigurationMetadata; int num1; if (this._metadataState.StreamTimestamp > this._position) { TimeSpan streamTimestamp = this._metadataState.StreamTimestamp; TimeSpan?nullable2 = nullable1; num1 = (nullable2.HasValue ? (streamTimestamp < nullable2.GetValueOrDefault() ? 1 : 0) : 0) == 0 ? 1 : 0; } else { num1 = 1; } if (num1 == 0) { nullable1 = new TimeSpan?(this._metadataState.StreamTimestamp); } int num2; if (this._metadataState.SegmentTimestamp > this._position) { TimeSpan segmentTimestamp = this._metadataState.SegmentTimestamp; TimeSpan?nullable2 = nullable1; num2 = (nullable2.HasValue ? (segmentTimestamp < nullable2.GetValueOrDefault() ? 1 : 0) : 0) == 0 ? 1 : 0; } else { num2 = 1; } if (num2 == 0) { nullable1 = new TimeSpan?(this._metadataState.SegmentTimestamp); } return(nullable1); } finally { if (lockTaken) { Monitor.Exit(obj); } } }
public virtual TimeSpan? Update(MetadataState state, TimeSpan position) { lock (_lock) { _position = position; var nextEvent = ProcessPendingTracks(); var streamMetadata = _metadataState.StreamMetadata; var segmentMetadata = _metadataState.SegmentMetadata; state.SegmentMetadata = segmentMetadata; state.SegmentTimestamp = _metadataState.SegmentTimestamp; state.StreamMetadata = streamMetadata; state.StreamTimestamp = _metadataState.StreamTimestamp; state.TrackMetadata = _metadataState.TrackMetadata; state.ConfigurationMetadata = _metadataState.ConfigurationMetadata; if (_metadataState.StreamTimestamp > _position && _metadataState.StreamTimestamp < nextEvent) nextEvent = _metadataState.StreamTimestamp; if (_metadataState.SegmentTimestamp > _position && _metadataState.SegmentTimestamp < nextEvent) nextEvent = _metadataState.SegmentTimestamp; return nextEvent; } }