private MediaStreamFsm.MediaState?Find(MediaStreamFsm.MediaState source, MediaStreamFsm.MediaEvent mediaEvent) { Dictionary <MediaStreamFsm.MediaEvent, MediaStreamFsm.MediaState> dictionary; if (!MediaStreamFsm.ValidTransitions.TryGetValue(source, out dictionary)) { return(new MediaStreamFsm.MediaState?()); } MediaStreamFsm.MediaState mediaState; if (!dictionary.TryGetValue(mediaEvent, out mediaState)) { return(new MediaStreamFsm.MediaState?()); } return(new MediaStreamFsm.MediaState?(mediaState)); }
public void ValidateEvent(MediaStreamFsm.MediaEvent mediaEvent) { MediaStreamFsm.MediaState source = (MediaStreamFsm.MediaState) this._mediaState; MediaStreamFsm.MediaState?nullable; MediaStreamFsm.MediaState mediaState; while (true) { nullable = this.Find(source, mediaEvent); if (nullable.HasValue) { mediaState = (MediaStreamFsm.MediaState)Interlocked.CompareExchange(ref this._mediaState, (int)nullable.Value, (int)source); if (mediaState != source) { source = mediaState; } else { goto label_3; } } else { break; } } Debug.WriteLine(string.Format("ValidateEvent Invalid state transition: state {0} event {1}", new object[2] { (object)source, (object)mediaEvent })); return; label_3: if (!MediaStreamFsm.NoisyLogging && mediaState == nullable.Value) { return; } Debug.WriteLine("Media {0}: {1} -> {2} at {3}", (object)mediaEvent, (object)mediaState, (object)nullable, (object)DateTimeOffset.Now); }