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);
            }
        }
Esempio n. 2
0
 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");
     }
 }
Esempio n. 3
0
        /// <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);
            }
        }