protected void OnEmberTreeChanged(object sender, Dispatcher.GlowRootReadyArgs e) { // Triggered on EmBER+ tree change Console.WriteLine("OnEmberTreeChanged"); try { GlowQualifiedParameter glowParameter = e.Root.FirstOrDefault() as GlowQualifiedParameter; ParameterBase changedParameter = GetElement <ParameterBase>(glowParameter?.Path); if (glowParameter != null) { Console.WriteLine($"EmberTree node {glowParameter.Value.ToString()} //IdentifierPath changed. {changedParameter?.IdentifierPath}"); Debug.WriteLine($"INFO {glowParameter.GetType().ToString()}"); Task.Run(async() => { Console.WriteLine($"EmberTree node {glowParameter.Value.ToString()} //IdentifierPath changed. {changedParameter?.IdentifierPath}"); await OnHandleValuesChanged(changedParameter); // TODO: Add event for saving tree }); } } catch (Exception ex) { Console.WriteLine("ERROR parsing tree"); Console.Write(ex); } }
void Dispatcher_GlowRootReady(object sender, Dispatcher.GlowRootReadyArgs e) { try { lock (_sync) { // INFO: // This part is changed from original code. Original code had a // foreach that caused an exception, because the list can change // during enumeration. for (int index = 0; index < _clients.Count; index++) { var client = _clients[index]; if (client != null && client != e.SourceClient) { try { if (e.Matrix == null || client.HasSubscribedToMatrix(e.Matrix)) { client.Write(e.Root); } } catch (Exception ex) { Debug.Write(ex, $"Exception in Dispatcher_GlowRootReady when updating client. {client}"); } } } } } catch (Exception ex) { Debug.Write(ex, "Exception in Dispatcher_GlowRootReady"); } }
/// <summary> /// Triggered on EmBER+ tree change /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void OnEmberTreeChanged(object sender, Dispatcher.GlowRootReadyArgs e) { Debug.WriteLine("EmberPlusProvider: OnEmberTreeChanged"); try { switch (e.Root.FirstOrDefault()) { case GlowQualifiedParameter gqp: ParameterBase changedParameter = GetElement <ParameterBase>(gqp?.Path); Debug.WriteLine($"EmberPlusProvider: EmberTree node {gqp.Value.ToString()} //IdentifierPath changed. {changedParameter?.IdentifierPath}"); Task.Run(() => { OnHandleValuesChanged(changedParameter); // TODO: Add event for saving tree }); break; case GlowQualifiedMatrix gqm: Element changedElement = GetElement <Element>(gqm?.Path); Debug.WriteLine($"EmberPlusProvider: EmberTree node {changedElement?.Identifier} //IdentifierPath changed. {changedElement?.IdentifierPath}"); if (changedElement == null) { return; } Task.Run(() => { foreach (GlowConnection connection in gqm.TypedConnections) { MatrixConnectionEvent?.Invoke(changedElement.IdentifierPath, connection, changedElement.Path); } // TODO: Add event for saving tree }); break; } } catch (Exception ex) { Debug.WriteLine("EmberPlusProvider: ERROR parsing tree"); Debug.Write(ex); } }