Пример #1
0
        private async void Timer_Elapsed(object sender, ElapsedEventArgs args)
        {
            List <int> toRemove = new List <int>();

            EffectState[] states = new EffectState[ActiveEffects.Count];
            for (int i = 0; i < ActiveEffects.Count; i++)
            {
                Effect e          = ActiveEffects[i];
                double timePassed = (DateTime.Now - e.Start).TotalSeconds;
                if (timePassed > e.Length)
                {
                    toRemove.Add(i);
                    continue;
                }
                states[i] = e.Update(timePassed);
            }
            toRemove.ForEach(x => ActiveEffects.RemoveAt(x));

            if (ActiveEffects.Count <= 0)
            {
                return;
            }

            Dictionary <int, Dictionary <short, byte> > mapping = new Dictionary <int, Dictionary <short, byte> >();

            foreach (EffectState state in states)
            {
                if (state.Parameters == null)
                {
                    continue;
                }

                foreach (EffectPar par in state.Parameters)
                {
                    if (!mapping.ContainsKey(par.Fixture))
                    {
                        mapping.Add(par.Fixture, new Dictionary <short, byte>());
                    }

                    if (!mapping[par.Fixture].ContainsKey(par.ParNum))
                    {
                        mapping[par.Fixture].Add(par.ParNum, par.Value);
                    }
                    else if (mapping[par.Fixture][par.ParNum] < par.Value)
                    {
                        mapping[par.Fixture][par.ParNum] = par.Value;
                    }
                }
            }
            Enums.FehlerT fehler = await console.QueryAsync(new CustomFixPar(mapping)).ConfigureAwait(false);

            if (fehler != Enums.FehlerT.FT_OK)
            {
                console.Logger?.Log("[EffectManager] response not FT_OK: " + fehler);
            }
        }
Пример #2
0
        private void SendClientReceive(byte[] e)
        {
            ByteBuffer buf = new ByteBuffer(e);

            Enums.FehlerT fehler = Enums.GetEnum <Enums.FehlerT>(buf.ReadUInt());

            if (completionQueue.Count <= 0)
            {
                return;
            }

            TaskCompletionSource <Enums.FehlerT> res = completionQueue.Dequeue();

            res?.SetResult(fehler);
        }