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