Example #1
0
        internal void ConcentratorClient_OnEvent(object Sender, SourceEventMessageEventArgs EventMessage)
        {
            DataSource Source;

            lock (this.dataSources)
            {
                if (!this.dataSources.TryGetValue(EventMessage.Event.SourceId, out Source))
                {
                    return;
                }
            }

            Source.ConcentratorClient_OnEvent(Sender, EventMessage);
        }
Example #2
0
        internal void ConcentratorClient_OnEvent(object Sender, SourceEventMessageEventArgs EventMessage)
        {
            SourceEvent Event = EventMessage.Event;
            string      Key, ParentKey;
            Node        Node;

            switch (Event.EventType)
            {
            case SourceEventType.NodeAdded:
                if (Event is NodeAdded NodeAdded)
                {
                    Key       = NodeAdded.Partition + " " + NodeAdded.NodeId;
                    ParentKey = NodeAdded.ParentPartition + " " + NodeAdded.ParentId;
                    Node Parent;

                    lock (this.nodes)
                    {
                        if (this.nodes.ContainsKey(Key))
                        {
                            return;                                     // Already added
                        }
                        if (!this.nodes.TryGetValue(ParentKey, out Parent))
                        {
                            return;                                     // Parent not loaded.
                        }
                        Node = new Node(Parent, new NodeInformation(NodeAdded.NodeId, NodeAdded.SourceId, NodeAdded.Partition,
                                                                    NodeAdded.NodeType, NodeAdded.DisplayName, NodeAdded.State, NodeAdded.LocalId, NodeAdded.LogId,
                                                                    NodeAdded.HasChildren, NodeAdded.ChildrenOrdered, NodeAdded.IsReadable, NodeAdded.IsControllable,
                                                                    NodeAdded.HasCommands, NodeAdded.Sniffable, NodeAdded.ParentId, NodeAdded.ParentPartition,
                                                                    NodeAdded.Updated, NodeAdded.Parameters, null));

                        this.nodes[Key] = Node;
                    }

                    Parent.Add(Node);
                }
                break;

            case SourceEventType.NodeUpdated:
                if (Event is NodeUpdated NodeUpdated)
                {
                    Key = NodeUpdated.Partition + " " + NodeUpdated.NodeId;

                    lock (this.nodes)
                    {
                        if (!this.nodes.TryGetValue(Key, out Node))
                        {
                            return;                                     // Parent not loaded.
                        }
                    }

                    Node.NodeInformation = new NodeInformation(NodeUpdated.NodeId, NodeUpdated.SourceId, NodeUpdated.Partition,
                                                               Node.NodeInformation.NodeType, Node.NodeInformation.DisplayName, NodeUpdated.State, NodeUpdated.LocalId, NodeUpdated.LogId,
                                                               NodeUpdated.HasChildren, NodeUpdated.ChildrenOrdered, NodeUpdated.IsReadable, NodeUpdated.IsControllable,
                                                               NodeUpdated.HasCommands, Node.NodeInformation.Sniffable, NodeUpdated.ParentId, NodeUpdated.ParentPartition,
                                                               NodeUpdated.Updated, NodeUpdated.Parameters, null);

                    Node.OnUpdated();
                }
                break;

            case SourceEventType.NodeRemoved:
                if (Event is NodeRemoved NodeRemoved)
                {
                    Key = NodeRemoved.Partition + " " + NodeRemoved.NodeId;

                    lock (this.nodes)
                    {
                        if (!this.nodes.TryGetValue(Key, out Node))
                        {
                            return;                                     // Parent not loaded.
                        }
                        this.nodes.Remove(Key);
                    }

                    Node.Parent.RemoveChild(Node);
                    this.NodesRemoved(new TreeNode[] { Node }, Node.Parent);
                }
                break;

            case SourceEventType.NodeStatusChanged:
                if (Event is NodeStatusChanged NodeStatusChanged)
                {
                    Key = NodeStatusChanged.Partition + " " + NodeStatusChanged.NodeId;

                    lock (this.nodes)
                    {
                        if (!this.nodes.TryGetValue(Key, out Node))
                        {
                            return;                                     // Parent not loaded.
                        }
                    }

                    Node.NodeInformation = new NodeInformation(NodeStatusChanged.NodeId, NodeStatusChanged.SourceId, NodeStatusChanged.Partition,
                                                               Node.NodeInformation.NodeType, Node.NodeInformation.DisplayName, NodeStatusChanged.State, NodeStatusChanged.LocalId, NodeStatusChanged.LogId,
                                                               Node.NodeInformation.HasChildren, Node.NodeInformation.ChildrenOrdered, Node.NodeInformation.IsReadable, Node.NodeInformation.IsControllable,
                                                               Node.NodeInformation.HasCommands, Node.NodeInformation.Sniffable, Node.NodeInformation.ParentId, Node.NodeInformation.ParentPartition,
                                                               Node.NodeInformation.LastChanged, Node.NodeInformation.ParameterList, null);

                    Node.OnUpdated();
                }
                break;

            case SourceEventType.NodeMovedUp:
                if (Event is NodeMovedUp NodeMovedUp)
                {
                    Key = NodeMovedUp.Partition + " " + NodeMovedUp.NodeId;

                    lock (this.nodes)
                    {
                        if (!this.nodes.TryGetValue(Key, out Node))
                        {
                            return;                                     // Parent not loaded.
                        }
                    }

                    // TODO: Node.Parent?.MoveUp(Node);
                }
                break;

            case SourceEventType.NodeMovedDown:
                if (Event is NodeMovedDown NodeMovedDown)
                {
                    Key = NodeMovedDown.Partition + " " + NodeMovedDown.NodeId;

                    lock (this.nodes)
                    {
                        if (!this.nodes.TryGetValue(Key, out Node))
                        {
                            return;                                     // Parent not loaded.
                        }
                    }

                    // TODO: Node.Parent?.MoveDown(Node);
                }
                break;
            }
        }