コード例 #1
0
        private void RemoveVideoSessionOwnership(VideoSessionOwnership ownership)
        {
            _VideoSessions.Remove(ownership);

            OwnershipRemoveRequested?.Invoke(this, new SessionOwnershipRemoveRequestedEventArgs(ownership.VideoId));
        }
コード例 #2
0
        public async Task <VideoSessionOwnership> TryRentVideoSessionOwnershipAsync(string videoId, bool isPriorityRent)
        {
            if (CanAddDownloadLine())
            {
                var ownership = new VideoSessionOwnership(videoId, this);
                _VideoSessions.Add(ownership);
                return(ownership);
            }

            var handlers = RentFailed;

            if (handlers != null)
            {
                TaskCompletionSource <bool> taskCompletionSource = new TaskCompletionSource <bool>();
                var args = new SessionOwnershipRentFailedEventArgs(() => taskCompletionSource.SetResult(true));
                handlers.Invoke(this, args);

                await Task.Delay(10);

                if (args.IsUseDeferral)
                {
                    await taskCompletionSource.Task;
                }

                if (!args.IsHandled)
                {
                    return(null);
                }

                if (isPriorityRent)
                {
                    var session = _VideoSessions.First();
                    session.TriggerStopOwnership();
                    (session as IDisposable).Dispose();

                    await Task.Delay(10);
                }

                if (CanAddDownloadLine())
                {
                    var ownership = new VideoSessionOwnership(videoId, this);
                    _VideoSessions.Add(ownership);
                    return(ownership);
                }
            }
            else
            {
                if (isPriorityRent)
                {
                    var session = _VideoSessions.First();
                    session.TriggerStopOwnership();
                    (session as IDisposable).Dispose();

                    await Task.Delay(10);
                }

                if (CanAddDownloadLine())
                {
                    var ownership = new VideoSessionOwnership(videoId, this);
                    _VideoSessions.Add(ownership);
                    return(ownership);
                }
            }

            return(null);
        }