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); }
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; } }