Exemplo n.º 1
0
        public void RequestInput(IComponent Component, Core.UserManager.Models.Users user, int?inputWaitDuration = null, Props.ReleaseRequestAction releaseRequestAction = Props.ReleaseRequestAction.Ask, Props.QueuePosition queuePosition = Props.QueuePosition.Last)
        {
            TimeSpan?ts = null;

            if (inputWaitDuration != null)
            {
                ts = TimeSpan.FromSeconds(Convert.ToInt32(inputWaitDuration));
            }

            Models.InputOwners inputOwner = new Models.InputOwners()
            {
                Name = Component.Name,
                ReleaseRequestAction = releaseRequestAction,
                QueuePosition        = queuePosition,
                InputWaitDuration    = ts,
                UserId = user.UserId,
                Users  = user,
            };

            using (var db = new CoreContext())
            {
                db.InputOwners.Add(inputOwner);
            }

            UpdateInputQueue(user.SubscriberId);
        }
Exemplo n.º 2
0
        private void UpdateInputQueue(int?subscriberId, int?clientId)
        {
            using (var db = new CoreContext())
            {
                var AddonThatOwnsInput = db.InputOwners.SingleOrDefault(x => x.HasOwnership);
                Models.InputOwners AddonThatWillOwnInput = null;

                var interruptRequests = GetOrderedAddonsInQueue(subscriberId, clientId, Props.QueuePosition.TryInterruptCurrent);
                var firstRequests     = GetOrderedAddonsInQueue(subscriberId, clientId, Props.QueuePosition.First);
                var lastRequests      = GetOrderedAddonsInQueue(subscriberId, clientId, Props.QueuePosition.Last);
                var noqueueRequests   = GetOrderedAddonsInQueue(subscriberId, clientId, Props.QueuePosition.NotQueueing);

                if (interruptRequests.Count() > 0)
                {
                    AddonThatWillOwnInput = interruptRequests.First();
                }
                else if (firstRequests.Count() > 0)
                {
                    AddonThatWillOwnInput = firstRequests.First();
                }
                else if (lastRequests.Count() > 0)
                {
                    AddonThatWillOwnInput = lastRequests.First();
                }
                else if (noqueueRequests.Count() > 0)
                {
                    AddonThatWillOwnInput = noqueueRequests.First();
                }
                else /* nobody to give input to, let's */ return {
                    ;
                }

                if (AddonThatOwnsInput == null)
                {
                    //Sure, have the input
                    AddonThatOwnsInput = AddonThatWillOwnInput;

                    db.SaveChanges();

                    NotifyAddonOwnershipChanged(AddonThatOwnsInput);
                }
                else if (AddonThatOwnsInput.ReleaseRequestAction == Props.ReleaseRequestAction.Ask)
                {
                    if (NotifyAddonInputReleaseRequest(AddonThatOwnsInput))
                    {
                        AddonThatOwnsInput = AddonThatWillOwnInput;

                        db.SaveChanges();

                        NotifyAddonOwnershipChanged(AddonThatOwnsInput);
                    }
                }
                else if (AddonThatOwnsInput.ReleaseRequestAction == Props.ReleaseRequestAction.Allow)
                {
                    var AddonThatOwnedInput = AddonThatOwnsInput;

                    AddonThatOwnsInput = AddonThatWillOwnInput;

                    db.SaveChanges();

                    NotifyAddonInputOwnershipRevoked(AddonThatOwnedInput);
                    NotifyAddonOwnershipChanged(AddonThatOwnsInput);
                }
                else
                {
                    return;
                }
            }