示例#1
0
        public void ProcessGadget(Guid id, GadgetSetValueRequest value, Action <string> logCallback)
        {
            Gadget gadget = Get(id, false);

            if (gadget == null)
            {
                logCallback(string.Format("Gadget '{0}' not found.", id));
                return;
            }
            else
            {
                logCallback(string.Format("Gadget {0} is found. Item will be updated.", gadget.Name));
            }

            _database.ExecuteScalar <string>(
                ConstantStrings.SqlQueries.Gadget.Update.UpdateValue,
                new List <SqliteParameter> {
                new SqliteParameter("Id", id),
                new SqliteParameter("Value", value.Value),
                new SqliteParameter("ComplexValue", value.ComplexValue)
            }
                );

            logCallback(string.Format("Gadget {0} is updated with values ({1},{2}).", gadget.Name, value.Value, value.ComplexValue));

            var actions = _gadgetActionService.GetByGadgetSource(id);

            actions.ForEach(action =>
            {
                logCallback(string.Format("Action {0} - ({1}) checking.", action.Order, action.Id));

                Gadget targetGadget = Get(action.TargetGadget, false);

                var scriptResult = _scriptingService.Execute(
                    action,
                    new ScriptParameter()
                {
                    SourceNewValue        = value.Value,
                    SourceNewComplexValue = value.ComplexValue,
                    SourceOldValue        = gadget.Value,
                    SourceOldComplexValue = gadget.ComplexValue,
                    TargetOldValue        = targetGadget.Value,
                    TargetOldComplexValue = targetGadget.ComplexValue
                });

                if (scriptResult.CanExecute)
                {
                    ProcessGadget(action.TargetGadget, new GadgetSetValueRequest()
                    {
                        Value = scriptResult.TargetNewValue, ComplexValue = scriptResult.TargetNewComplexValue
                    }, logCallback);
                }
            });
        }
示例#2
0
        public Gadget BindGadgetData(SqliteDataReader reader)
        {
            Gadget returnValue = new Gadget
            {
                Id              = reader.GetValueAsGuid("Id"),
                Name            = reader.GetValue(reader.GetOrdinal("Name")).ToString(),
                Configuration   = reader.GetValue(reader.GetOrdinal("Configuration")).ToString(),
                Status          = (GadgetStatus)(int)(long)reader.GetValue(reader.GetOrdinal("Status")),
                Value           = (double)reader.GetValue(reader.GetOrdinal("Value")),
                ComplexValue    = reader.GetValue(reader.GetOrdinal("ComplexValue")).ToString(),
                SectionPosition = (PositionType)(int)(long)reader.GetValue(reader.GetOrdinal("SectionPosition")),
                Definition      = reader.GetValueAsGuid("Definition"),
                ReadFrequency   = reader.GetValue(reader.GetOrdinal("ReadFrequency")).ToString(),
            };

            return(returnValue);
        }
示例#3
0
        public Gadget Get(Guid id, bool includeActions)
        {
            Gadget           gadget = null;
            SqliteDataReader reader = _database.ExecuteReader(
                ConstantStrings.SqlQueries.Gadget.Get.IdParam,
                new List <SqliteParameter> {
                new SqliteParameter("Id", id)
            }
                );

            if (reader.Read())
            {
                gadget = BindGadgetData(reader);

                if (includeActions)
                {
                    gadget.SourceActions.AddRange(_gadgetActionService.GetByGadgetSource(id));
                    gadget.TargetActions.AddRange(_gadgetActionService.GetByGadgetTarget(id));
                }
            }
            return(gadget);
        }