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