Exemple #1
0
        public Link AddLink(Output output, Input input, bool writeInDb = true)
        {
            Node inputNode  = GetInputOwner(input);
            Node outputNode = GetOutputOwner(output);

            if (inputNode == null || outputNode == null)
            {
                LogEngineError($"Can`t create link from [{output.Id}] to [{input.Id}]. Does not exist.");
                return(null);
            }

            if (inputNode == outputNode)
            {
                LogEngineError($"Can`t create link from [{output.Id}] to [{input.Id}]. Input and output belong to the same node.");
                return(null);
            }

            if (inputNode.PanelId != outputNode.PanelId)
            {
                LogEngineError($"Can`t create link from {outputNode.GetType().Name} to {inputNode.GetType().Name}. Nodes are on different panels.");
                return(null);
            }


            Link link = new Link(output.Id, input.Id, inputNode.PanelId);

            //prevent two links to one input
            Link oldLink = GetLinkForInput(input);

            if (oldLink != null)
            {
                RemoveLink(oldLink, true);
            }

            LogEngineInfo($"New link from [{outputNode.GetType().Name}] to [{inputNode.GetType().Name}]");

            lock (linksLock)
                links.Add(link);


            if (writeInDb)
            {
                nodesDb?.AddLink(link);
            }

            OnNewLink?.Invoke(link);

            if (started)
            {
                input.Value = output.Value;
            }

            return(link);
        }
Exemple #2
0
        public void UpdateNodeInDb(Node node)
        {
            Node oldNode = GetNode(node.Id);

            if (oldNode == null)
            {
                LogEngineError($"Can`t update node [{node.GetType().Name}]. Node [{node.Id}] does not exist.");
                return;
            }

            //  LogEngineInfo($"Update node in DB [{node.GetType().Name}]");
            nodesDb?.UpdateNode(node);
        }
        public void RemoveNode(Node node)
        {
            lock (nodesLock)
                if (!nodes.Contains(node))
                {
                    LogEngineError($"Can`t remove node [{node.GetType().Name}]. Node [{node.Id}] does not exist.");
                    return;
                }

            List<Node> nodesToRemove = new List<Node>();
            nodesToRemove.Add(node);

            List<Link> linksToRemove = new List<Link>();
            List<Link> links = GetLinksForNode(node);
            linksToRemove.AddRange(links);

            foreach (var link in links)
            {
                RemoveLink(link, false);
            }

            node.OnRemove();

            if (node is PanelNode)
            {
                var nodesOnPanel = GetNodesForPanel(node.Id, true);
                nodesToRemove.AddRange(nodesOnPanel);

                foreach (var n in nodesOnPanel)
                {
                    List<Link> li = GetLinksForNode(n);
                    linksToRemove.AddRange(li);
                    foreach (var link in li)
                    {
                        RemoveLink(link, false);
                    }

                    LogEngineInfo($"Remove node [{n.GetType().Name}]");
                    OnRemoveNode?.Invoke(n);

                    lock (nodesLock)
                        nodes.Remove(n);
                }
            }

            lock (nodesLock)
                nodes.Remove(node);

            nodesDb?.RemoveNodes(nodesToRemove);
            nodesDb?.RemoveLinks(linksToRemove);

            LogEngineInfo($"Remove node [{node.GetType().Name}]");
            OnRemoveNode?.Invoke(node);
        }
        public void UpdateNodeInDb(Node node)
        {
            Node oldNode = GetNode(node.Id);

            if (oldNode == null)
            {
                LogEngineError($"Can`t update node [{node.GetType().Name}]. Node [{node.Id}] does not exist.");
                return;
            }

            //  LogEngineInfo($"Update node in DB [{node.GetType().Name}]");
            nodesDb?.UpdateNode(node);
        }
        public bool AddNode(Node node, bool writeInDb = true)
        {
            if (node.PanelId != MAIN_PANEL_ID && GetPanelNode(node.PanelId) == null)
            {
                LogEngineError($"Can`t create node [{node.GetType().Name}]. Panel [{node.PanelId}] does not exist.");
                return false;
            }

            bool checkNodeCanBeAdded = node.OnAddToEngine(this);
            if (!checkNodeCanBeAdded)
            {
                LogEngineError($"Can`t create node [{node.GetType().Name}]. Aborted by node.");
                return false;
            }

            lock (nodesLock)
                nodes.Add(node);

            if (writeInDb)
                nodesDb?.AddNode(node);

            LogEngineInfo($"New node [{node.GetType().Name}]");

            OnNewNode?.Invoke(node);

            return true;
        }