/// <summary>
        /// Queues a transition in worker state for processing. Returns a task that can be awaited
        /// when the operation completes.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>The awaitable task.</returns>
        private Task <WorkerState> QueueStateChange(StateChangeRequest request)
        {
            lock (SyncLock)
            {
                if (StateChangeTask != null)
                {
                    return(StateChangeTask);
                }

                var waitingTask = new Task <WorkerState>(() =>
                {
                    StateChangedEvent.Wait();
                    lock (SyncLock)
                    {
                        StateChangeTask = null;
                        return(WorkerState);
                    }
                });

                StateChangeTask = waitingTask;
                StateChangedEvent.Reset();
                StateChangeRequests[request] = true;
                waitingTask.Start();
                CycleCancellation.Cancel();

                return(waitingTask);
            }
        }
Beispiel #2
0
        public void TestStateChange()
        {
            var world = new World("Test world");
            var em    = world.EntityManager;

            var system = world.CreateSystem <CharacterSystem>();

            var obj  = em.CreateEntity();
            var obj2 = em.CreateEntity();

            em.AddComponentData(obj, StateChangeRequest.Create <Dead>());
            em.AddComponentData(obj2, StateChangeRequest.Create <Alive>());

            system.Update();
            system.Update();

            Assert.IsTrue(StateUtility.IsInState <Dead>(obj, em));
            Assert.IsTrue(StateUtility.IsInState <Alive>(obj2, em));

            em.AddComponentData(obj, StateChangeRequest.Create <Alive>());
            em.AddComponentData(obj2, StateChangeRequest.Create <Dead>());

            system.Update();

            Assert.IsTrue(StateUtility.IsInState <Alive>(obj, em));
            Assert.IsTrue(StateUtility.IsInState <Dead>(obj2, em));
        }
Beispiel #3
0
        private async Task DeleteBook()
        {
            var confirmParams = new ModalParameters();

            confirmParams.Add(nameof(Confirm.ConfirmationMessage), $"آیا از حذف کتاب {BookDto.Title} مطمئن می‌باشید؟");

            var confirmModal = ModalService.Show <Confirm>("تایید حذف", confirmParams);

            var result = await confirmModal.Result;

            if (!result.Cancelled && (bool)result.Data)
            {
                await BookWebService.DeleteBook(BookDto.Id);

                ToastService.ShowSuccess("حذف کتاب با موفقیت انجام شد");

                await StateChangeRequest.InvokeAsync();
            }
        }
Beispiel #4
0
        void PUC.IDevice2.HandleMessage(Connection c, PUC.Communication.Message m)
        {
            Globals.GetFrame(_appliance).AddLogLine(m.ToString());
            PUC.Communication.Message newmsg;

            if (m is SpecRequest)
            {
                newmsg = new PUC.Communication.DeviceSpec(_specification);
                c.Send(newmsg);
            }
            else if (m is FullStateRequest)
            {
                IEnumerator states = _appliance.VariableTable.GetObjectEnumerator();;
                while (states.MoveNext())
                {
                    if (!((ApplianceObject)states.Current).State)
                    {
                        continue;
                    }

                    ApplianceState state = (ApplianceState)states.Current;

                    if (state.Defined)
                    {
                        newmsg = new StateChangeNotification(state.FullName, state.Value.ToString());
                    }
                    else
                    {
                        newmsg = new StateChangeNotification(state.FullName);
                    }

                    c.Send(newmsg);
                }
            }
            else if (m is StateChangeRequest)
            {
                StateChangeRequest smsg = (StateChangeRequest)m;

                try
                {
                    ApplianceState state =
                        (ApplianceState)_appliance.VariableTable[smsg.GetState()];

                    if (state != null)
                    {
                        string val =
                            state.Type.ValueSpace.Validate(smsg.Value).ToString();
                        newmsg = new StateChangeNotification(smsg.GetState(), val);

                        SendAll(newmsg);
                    }
                }
                catch (Exception)
                {
                }
            }
            else if (m is CommandInvokeRequest)
            {
                this.AddLogLine("Command " + ((CommandInvokeRequest)m).GetCommand() + " requested to be invoked.");
            }
        }