コード例 #1
0
        protected BackgroundMediaNotifier(Guid id)
        {
            _id = id;
            _sendTask = new SignalTask(() =>
            {
                for (; ; )
                {
                    ValueSet valueSet;

                    lock (_queue)
                    {
                        if (_queue.Count < 1)
                            return TplTaskExtensions.CompletedTask;

                        valueSet = _queue.Dequeue();
                    }

                    try
                    {
                        SendMessage(valueSet);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("BackgroundAudioNotifier notifier failed: " + ex.Message);
                    }
                }
            });
        }
コード例 #2
0
        public ValueSetWorkerQueue(Func<ValueSet, Task> handler)
        {
            _signalTask = new SignalTask(async () =>
            {
                for (; ; )
                {
                    ValueSet valueSet;

                    lock (_queue)
                    {
                        if (_queue.Count < 1)
                            break;

                        valueSet = _queue.Dequeue();
                    }

                    try
                    {
                        await handler(valueSet).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("NotifierQueue handler failed: " + ex.ExtendedMessage());
                    }
                }
            });
        }
コード例 #3
0
        public AudioMetadataHandler(CancellationToken cancellationToken)
        {
            _updateTask = new SignalTask(Update, cancellationToken);

            _metadataSink = new ActionMetadataSink(_updateTask.Fire);

            _timer = new Timer(obj => ((AudioMetadataHandler)obj).Refresh(), this, Timeout.Infinite, Timeout.Infinite);
        }
コード例 #4
0
ファイル: MediaDumpBase.cs プロジェクト: henricj/phonesm
        protected MediaDumpBase(Action<IProgramStreams> programStreamsHandler)
        {
            _programStreamsHandler = programStreamsHandler;
            BufferPool = new BufferPool(new DefaultBufferPoolParameters
            {
                BaseSize = 5 * 64 * 1024,
                Pools = 2
            });

            PacketPool = new TsPesPacketPool(BufferPool);
            _bufferingManager = new NullBufferingManager(PacketPool);

            _streamReader = new SignalTask(ReadStreams);
        }
コード例 #5
0
ファイル: BufferingManager.cs プロジェクト: henricj/phonesm
        public BufferingManager(IBufferingPolicy bufferingPolicy, ITsPesPacketPool packetPool)
        {
            if (null == bufferingPolicy)
                throw new ArgumentNullException(nameof(bufferingPolicy));
            if (null == packetPool)
                throw new ArgumentNullException(nameof(packetPool));

            _bufferingPolicy = bufferingPolicy;
            _packetPool = packetPool;

            _refreshTask = new SignalTask(() =>
            {
                RefreshHandler();

                return TplTaskExtensions.CompletedTask;
            }, _disposeCancellationTokenSource.Token);
        }
コード例 #6
0
ファイル: MetadataHandler.cs プロジェクト: henricj/phonesm
        public MetadataHandler(SystemMediaTransportControls systemMediaTransportControls, ForegroundNotifier notifier, Func<TimeSpan> getPosition, Action<TimeSpan> reportNextEvent, CancellationToken cancellationToken)
        {
            if (null == systemMediaTransportControls)
                throw new ArgumentNullException(nameof(systemMediaTransportControls));
            if (null == notifier)
                throw new ArgumentNullException(nameof(notifier));
            if (null == getPosition)
                throw new ArgumentNullException(nameof(getPosition));
            if (null == reportNextEvent)
                throw new ArgumentNullException(nameof(reportNextEvent));

            _systemMediaTransportControls = systemMediaTransportControls;
            _notifier = notifier;
            _getPosition = getPosition;
            _reportNextEvent = reportNextEvent;

            _updateTask = new SignalTask(Update, cancellationToken);

            _metadataSink = new ActionMetadataSink(_updateTask.Fire);
        }
コード例 #7
0
        public SingleStreamMediaManager(Func<IBufferingManager> bufferingManagerFactory, IMediaParserFactory mediaParserFactory,
            IMediaStreamConfigurator mediaStreamConfigurator, IWebMetadataFactory webMetadataFactory, IWebReaderManager webReaderManager)
        {
            if (null == bufferingManagerFactory)
                throw new ArgumentNullException(nameof(bufferingManagerFactory));
            if (null == mediaParserFactory)
                throw new ArgumentNullException(nameof(mediaParserFactory));
            if (null == mediaStreamConfigurator)
                throw new ArgumentNullException(nameof(mediaStreamConfigurator));
            if (null == webMetadataFactory)
                throw new ArgumentNullException(nameof(webMetadataFactory));
            if (null == webReaderManager)
                throw new ArgumentNullException(nameof(webReaderManager));

            _bufferingManagerFactory = bufferingManagerFactory;
            _mediaParserFactory = mediaParserFactory;
            _mediaStreamConfigurator = mediaStreamConfigurator;
            _webMetadataFactory = webMetadataFactory;
            _webReaderManager = webReaderManager;

            _reportStateTask = new SignalTask(ReportState);
        }
コード例 #8
0
ファイル: SmMediaManager.cs プロジェクト: henricj/phonesm
        public SmMediaManager(ISegmentReaderManagerFactory segmentReaderManagerFactory,
            IMediaStreamConfigurator mediaStreamConfigurator, Func<IBufferingManager> bufferingManagerFactory,
            IMediaManagerParameters mediaManagerParameters, IMediaParserFactory mediaParserFactory)
        {
            if (null == segmentReaderManagerFactory)
                throw new ArgumentNullException(nameof(segmentReaderManagerFactory));
            if (null == mediaStreamConfigurator)
                throw new ArgumentNullException(nameof(mediaStreamConfigurator));
            if (null == bufferingManagerFactory)
                throw new ArgumentNullException(nameof(bufferingManagerFactory));

            _segmentReaderManagerFactory = segmentReaderManagerFactory;
            _mediaStreamConfigurator = mediaStreamConfigurator;
            _bufferingManagerFactory = bufferingManagerFactory;
            _mediaParserFactory = mediaParserFactory;
            _programStreamsHandler = mediaManagerParameters.ProgramStreamsHandler;

            // Start with a canceled token (i.e., we are not playing)
            _playbackCancellationTokenSource.Cancel();
            _playbackTaskCompletionSource.TrySetResult(null);

            _reportStateTask = new SignalTask(ReportState);
        }
コード例 #9
0
 public FifoTaskScheduler(CancellationToken cancellationToken)
 {
     this._workerTask = new SignalTask(new Func <Task>(this.Worker), cancellationToken);
 }
コード例 #10
0
 public AsyncFifoWorker()
 {
     this._signalTask = new SignalTask(new Func <Task>(this.Worker));
 }
コード例 #11
0
 public AsyncFifoWorker(CancellationToken cancellationToken)
 {
     this._signalTask = new SignalTask(new Func <Task>(this.Worker), cancellationToken);
 }
コード例 #12
0
ファイル: BufferingManager.cs プロジェクト: henricj/phonesm
        public void Dispose()
        {
            if (0 != Interlocked.Exchange(ref _isDisposed, 1))
                return;

            _disposeCancellationTokenSource.Cancel();

            using (_refreshTask)
            { }

            using (_reportingTask)
            { }
            _reportingTask = null;

            _disposeCancellationTokenSource.Dispose();

            lock (_lock)
            {
                _queues.Clear();
            }

            var queueThrottling = Interlocked.Exchange(ref _queueThrottling, null);

            if (null != queueThrottling)
                Debug.WriteLine("**** BufferingManager.Dispose() _queueThrottling was not null");
        }
コード例 #13
0
ファイル: FifoTaskScheduler.cs プロジェクト: henricj/phonesm
 public FifoTaskScheduler(CancellationToken cancellationToken)
 {
     _workerTask = new SignalTask(Worker, cancellationToken);
 }
コード例 #14
0
 public QueueWorker(Action <TWorkItem> callback, Action <TWorkItem> cleanup)
 {
     this._callback   = callback;
     this._cleanup    = cleanup;
     this._workerTask = SignalTask.Create(new Action(this.Worker));
 }
コード例 #15
0
ファイル: AsyncFifoWorker.cs プロジェクト: henricj/phonesm
 public AsyncFifoWorker()
 {
     _signalTask = new SignalTask(Worker);
 }
コード例 #16
0
ファイル: AsyncFifoWorker.cs プロジェクト: henricj/phonesm
 public AsyncFifoWorker(CancellationToken cancellationToken)
 {
     _signalTask = new SignalTask(Worker, cancellationToken);
 }
コード例 #17
0
ファイル: BufferingManager.cs プロジェクト: henricj/phonesm
        public void Initialize(IQueueThrottling queueThrottling, Action reportBufferingChange)
        {
            Debug.WriteLine("BufferingManager.Initialize()");

            if (null == queueThrottling)
                throw new ArgumentNullException(nameof(queueThrottling));
            if (reportBufferingChange == null)
                throw new ArgumentNullException(nameof(reportBufferingChange));

            ThrowIfDisposed();

            if (null != Interlocked.CompareExchange(ref _queueThrottling, queueThrottling, null))
                throw new InvalidOperationException("The buffering manager is in use");

            HandleStateChange();

            _reportingTask = new SignalTask(() =>
            {
                reportBufferingChange();

                return TplTaskExtensions.CompletedTask;
            }, _disposeCancellationTokenSource.Token);
        }