/// <summary>
        /// Function returns Node stored in database based on id
        /// </summary>
        /// <returns>INode object created based on specified type</returns>
        public INode GetNode(Guid id)
        {
            try
            {
                //using var context = new DbEconomyContext();
                var node = context.Nodes
                           .Where(n => !n.Deleted)
                           .Where(n => n.Id == id.ToString())
                           .FirstOrDefault();

                NodeActionParameters parameters = new NodeActionParameters();

                if (node != null)
                {
                    if (!string.IsNullOrEmpty(node.Parameters))
                    {
                        try
                        {
                            parameters = JsonConvert.DeserializeObject <NodeActionParameters>(node.Parameters);
                        }
                        catch (Exception ex)
                        {
                            log.Error("Cannot get Node Parameters from Db. Continue with empty parameters", ex);
                        }
                    }
                }

                return(node.Fill(NodeFactory.GetNode((NodeTypes)node.Type, new Guid(node.Id), new Guid(node.AccountId), node.Name, (bool)node.IsActivated, parameters)));
            }
            catch (Exception ex)
            {
                log.Error("Cannot get Node from Db", ex);
                return(null);
            }
        }
示例#2
0
        public override void LoadParameters(NodeActionParameters parameters)
        {
            Parameters = JsonConvert.SerializeObject(parameters);
            var o = new object();

            lock (o)
            {
                ParsedParams = parameters;
            }
        }
示例#3
0
 public BasicNode(Guid id, Guid accId, string name, NodeActionParameters parameters)
 {
     Type      = NodeTypes.Common;
     Id        = id;
     AccountId = accId;
     Name      = name;
     LoadParameters(parameters);
     IsActivated       = false;
     ActualTriggerType = NodeActionTriggerTypes.None;
 }
        /// <summary>
        /// Function returns all Nodes stored in database
        /// </summary>
        /// <returns>List of INode object created based on specified type</returns>
        public List <INode> GetNodes()
        {
            try
            {
                ////using var context = new DbEconomyContext();

                var nodes = new List <INode>();
                NodeActionParameters parameters = new NodeActionParameters();

                foreach (var n in context.Nodes.Where(n => !n.Deleted))
                {
                    if (n != null)
                    {
                        if (!string.IsNullOrEmpty(n.Parameters))
                        {
                            try
                            {
                                parameters = JsonConvert.DeserializeObject <NodeActionParameters>(n.Parameters);
                            }
                            catch (Exception ex)
                            {
                                log.Warn("Cannot get Node Parameters from Db. Continue with empty parameters", ex);
                            }
                        }
                    }

                    var actid = string.Empty;
                    if (!string.IsNullOrEmpty(n.AccountId))
                    {
                        actid = n.AccountId;
                    }
                    else
                    {
                        actid = Guid.Empty.ToString();
                    }

                    var node = n.Fill(NodeFactory.GetNode((NodeTypes)n.Type, new Guid(n.Id), new Guid(actid), n.Name, (bool)n.IsActivated, parameters));
                    node.SetNodeTriggerType(parameters.TriggerType);

                    nodes.Add(node);
                }

                return(nodes);
            }
            catch (Exception ex)
            {
                log.Error("Cannot get Nodes from Db. Continue with empty list!", ex);
                return(null);
            }
        }
 public MQTTPublishNode(Guid id, Guid accId, string name, bool isActivated, NodeActionParameters parameters)
 {
     Type      = NodeTypes.HTTPAPIRequest;
     Id        = id;
     AccountId = accId;
     Name      = name;
     if (parameters != null)
     {
         LoadParameters(parameters);
         SetNodeTriggerType(parameters.TriggerType);
     }
     IsActivated       = isActivated;
     ActualTriggerType = NodeActionTriggerTypes.None;
     mqttClient        = new MQTTClient("node-" + id.ToString());
 }
        public override string UpdateNode(string accountAddress, string nodeId, Guid ownerid, string nodeName, NodeTypes type, bool isActivated, NodeActionParameters parameters, IDbConnectorService dbservice)
        {
            //IDbConnectorService dbservice = new DbConnectorService();

            try
            {
                var accountId = Guid.Empty;

                if (EconomyMainContext.Accounts.TryGetValue(accountAddress, out var account))
                {
                    accountId = account.Id;
                }
                else
                {
                    Console.WriteLine("Cannot create node - account not found");
                }

                if (EconomyMainContext.Nodes.TryGetValue(nodeId, out var foundnode))
                {
                    foundnode.AccountId = accountId;
                    if (isActivated)
                    {
                        foundnode.Activate();
                    }
                    else
                    {
                        foundnode.DeActivate();
                    }

                    foundnode.LoadParameters(parameters);
                    foundnode.SetNodeTriggerType(parameters.TriggerType);
                    foundnode.Name = nodeName;

                    if (EconomyMainContext.WorkWithDb)
                    {
                        if (!dbservice.SaveNode(foundnode))
                        {
                            return("Cannot save Node to the db!");
                        }
                    }
                }
                else
                {
                    var id = Guid.NewGuid();

                    if (string.IsNullOrEmpty(id.ToString()))
                    {
                        id = Guid.NewGuid();
                    }

                    if (string.IsNullOrEmpty(ownerid.ToString()))
                    {
                        ownerid = Guid.NewGuid();
                    }

                    var node = NodeFactory.GetNode(type, id, accountId, nodeName, isActivated, parameters);

                    if (node != null)
                    {
                        node.ActionRequest += Node_ActionRequest;

                        EconomyMainContext.Nodes.TryAdd(node.Id.ToString(), node);

                        if (EconomyMainContext.WorkWithDb)
                        {
                            if (!dbservice.SaveNode(node))
                            {
                                return("Cannot save Node to the db!");
                            }
                        }
                    }
                }

                return("OK");
            }
            catch (Exception ex)
            {
                log.Error("Cannot create node", ex);
                return("Cannot create node!");
            }
        }
示例#7
0
        public static INode GetNode(NodeTypes type, Guid id, Guid accId, string name, bool isActivated, NodeActionParameters parameters)
        {
            switch (type)
            {
            case NodeTypes.Common:
                return(new BasicNode(id, accId, name, parameters));

            case NodeTypes.MQTTApiPublish:
                if (id == Guid.Empty)
                {
                    id = Guid.NewGuid();
                }
                return(new MQTTPublishNode(id, accId, name, isActivated, parameters));

            case NodeTypes.HTTPAPIRequest:
                if (id == Guid.Empty)
                {
                    id = Guid.NewGuid();
                }
                return(new HTTPApiRequestNode(id, accId, name, isActivated, parameters));
            }

            return(new BasicNode(id, accId, name, parameters));;
        }
 public abstract void LoadParameters(NodeActionParameters parameters);
示例#9
0
 public abstract string UpdateNode(string accountAddress, string nodeId, Guid ownerid, string nodeName, NodeTypes type, bool isActivated, NodeActionParameters parameters, IDbConnectorService dbservice);
示例#10
0
 public HTTPApiRequestNode(Guid id, Guid accId, string name, bool isActivated, NodeActionParameters parameters)
 {
     Type      = NodeTypes.HTTPAPIRequest;
     Id        = id;
     AccountId = accId;
     Name      = name;
     if (parameters != null)
     {
         LoadParameters(parameters);
         SetNodeTriggerType(parameters.TriggerType);
     }
     IsActivated       = isActivated;
     ActualTriggerType = NodeActionTriggerTypes.None;
 }