using System.Collections.Generic; namespace ScreenConnect; public class MultiCaptureStreamManager : CaptureStreamManager where TStreamState : class, new() { private Dictionary streamStateMap; public MultiCaptureStreamManager(Proc streamStateDisposer = null) : base(streamStateDisposer) { streamStateMap = new Dictionary(); } public override TStreamState GetStreamState(CaptureStreamMessage message) { bool flag = IsBoundaryMessage(message); if (!streamStateMap.TryGetValue(message.StreamID, out var streamState)) { if (!flag) { return null; } streamStateMap[message.StreamID] = (streamState = new TStreamState()); } else if (flag) { streamStateMap.Remove(message.StreamID); base.StreamStateDisposer.SafeDo(delegate(Proc _) { _(streamState); }); return null; } return streamState; } public override void Dispose() { foreach (TStreamState streamState in streamStateMap.Values) { base.StreamStateDisposer.SafeDo(delegate(Proc _) { _(streamState); }); } } }