protected override void module_PropertyChanged(object sender, ModuleParameter e)
 {
     if (e.Name.StartsWith("Sensor."))
     {
         DisplayProperty(e);
     }
 }
Beispiel #2
0
        public static string WaitModuleParameterChange(Module mod, string parameter)
        {
            string val = "";
            // TODO make it as a function _waitModuleParameterChange(mod, parname, timeout)
            ModuleParameter p = Service.Utility.ModuleParameterGet(mod, parameter);

            if (p != null)
            {
                long updated = DateTime.UtcNow.Ticks; //p.UpdateTime.Ticks - (TimeSpan.TicksPerSecond * 1);
                //
                System.Threading.Thread.Sleep(500);
                //
                int timeout  = 0;
                int maxwait  = 50; //(50 * 100ms ticks = 5000 ms)
                int tickfreq = 100;
                //
                while ((TimeSpan.FromTicks(p.UpdateTime.Ticks - updated).TotalSeconds > 1 /*&& (DateTime.UtcNow.Ticks - p.UpdateTime.Ticks > 5 * TimeSpan.TicksPerSecond)*/) && timeout++ < maxwait)
                {
                    System.Threading.Thread.Sleep(tickfreq);
                }
                //
                if (timeout < maxwait)
                {
                    val = p.Value;
                }
            }
            return(val);
        }
Beispiel #3
0
        void ShowModuleScreen(Module m)
        {
            BaseWidget widget = null;
            //
            ModuleParameter widgetProperty = m.GetProperty("Widget.DisplayModule");

            if (widgetProperty != null && !String.IsNullOrEmpty(widgetProperty.Value))
            {
                switch (widgetProperty.Value)
                {
                case "homegenie/generic/light":
                case "homegenie/generic/switch":
                    widget = new Switch();
                    break;

                case "homegenie/generic/dimmer":
                    widget = new Dimmer();
                    break;

                case "homegenie/generic/colorlight":
                    widget = new ColorLight();
                    break;

                case "weather/wunderground/conditions":
                    widget = new Weather();
                    break;

                default:
                    break;
                }
            }
            //
            if (widget == null)
            {
                if (m.DeviceType == "Dimmer" || m.DeviceType == "Light" || m.DeviceType == "Shutter" || m.DeviceType == "Siren")
                {
                    widget = new Dimmer();
                }
                else if (m.DeviceType == "Switch")
                {
                    widget = new Switch();
                }
            }
            //
            if (widget != null)
            {
                widget.CloseButtonClicked += (sender, args) =>
                {
                    this.Controls.Remove(widget);
                    this.Controls.Add(currentWidget);
                    widgetCycle.Start();
                };
                widget.Module = m;
                widget.Dock   = DockStyle.Fill;
                //
                widgetCycle.Stop();
                this.Controls.Remove(currentWidget);
                this.Controls.Add(widget);
            }
        }
Beispiel #4
0
        public static string WaitModuleParameterChange(Module module, string parameterName)
        {
            string value = "";
            // TODO make it as a function _waitModuleParameterChange(mod, parname, timeout)
            ModuleParameter parameter = Service.Utility.ModuleParameterGet(module, parameterName);

            if (parameter != null)
            {
                var updated = DateTime.UtcNow.Ticks; //p.UpdateTime.Ticks - (TimeSpan.TicksPerSecond * 1);
                //
                Thread.Sleep(500);
                //
                int timeout       = 0;
                int maxWait       = 50; //(50 * 100ms ticks = 5000 ms)
                int tickFrequency = 100;
                //
                while ((TimeSpan.FromTicks(parameter.UpdateTime.Ticks - updated).TotalSeconds > 1 /*&& (DateTime.UtcNow.Ticks - p.UpdateTime.Ticks > 5 * TimeSpan.TicksPerSecond)*/) && timeout++ < maxWait)
                {
                    Thread.Sleep(tickFrequency);
                }
                //
                if (timeout < maxWait)
                {
                    value = parameter.Value;
                }
            }
            return(value);
        }
Beispiel #5
0
        /// <summary>
        /// Gets the specified module parameter.
        /// </summary>
        /// <param name="parameter">Parameter.</param>
        public ModuleParameter Parameter(string parameter)
        {
            ModuleParameter value = null;

            if (this.module != null)
            {
                int retry = 10; // 500ms max
                while (value == null && retry > 0)
                {
                    value = Utility.ModuleParameterGet(this.module, parameter);
                    // TODO: sometimes ModuleParameterGet returns null even if a parameter exists!
                    // TODO: not sure why is this bug occurring (threading issue?), but it's solved by retrying getting the value
                    // TODO: consider this just as a temporary work-around, further investigation required
                    if (value == null)
                    {
                        Thread.Sleep(50);
                        retry--;
                    }
                }
                if (parameter == "Simulator.Sensor.DataFrequency" && value == null)
                {
                    Console.WriteLine(this.Instance.Name, parameter, value);
                }
                // create parameter if does not exists
                if (value == null)
                {
                    value = Utility.ModuleParameterSet(module, parameter, "");
                }
            }
            return(value);
        }
Beispiel #6
0
        private List <ModuleParameter> GetStoredProcedureParameters(TSqlProcedure proc)
        {
            var result = new List <ModuleParameter>();

            foreach (var parameter in proc.Parameters)
            {
                var newParameter = new ModuleParameter()
                {
                    Length    = parameter.Length,
                    Name      = parameter.Name.Parts[2].Trim('@'),
                    Output    = parameter.IsOutput,
                    Precision = parameter.Precision,
                    Scale     = parameter.Scale,
                    StoreType = parameter.DataType.First().Name.Parts[0],
                    Nullable  = true,
                    //TypeName = parameter.ObjectType.Name,
                };

                result.Add(newParameter);
            }

            // Add parameter to hold the standard return value
            result.Add(new ModuleParameter()
            {
                Name      = "returnValue",
                StoreType = "int",
                Output    = true,
                Nullable  = false,
            });

            return(result);
        }
Beispiel #7
0
 protected override void module_PropertyChanged(object sender, ModuleParameter e)
 {
     if (e.Name == "Meter.Watts" && e.DecimalValue > 0)
     {
         if (refreshDelay != null)
         {
             try { refreshDelay.Abort(); } catch { }
             refreshDelay = null;
         }
         refreshDelay = new Thread(() =>
         {
             Thread.Sleep(8000);
             Refresh();
         });
         refreshDelay.Start();
         //
         UiHelper.SafeInvoke(labelStatus, () =>
         {
             labelStatus.ForeColor = Color.Cyan;
             labelStatus.Text      = Math.Round(e.DecimalValue, 1) + "W";
         });
     }
     else
     {
         Refresh();
     }
 }
Beispiel #8
0
        public int Create(ModuleParameter parameters)
        {
            var viewModel   = MapFromClientParameters(parameters);
            var entity      = viewModel.MapTo <Module>();
            var savedEntity = MasterFileService.Add(entity);

            return(savedEntity.Id);
        }
Beispiel #9
0
        public static SqlDbType DbType(this ModuleParameter storedProcedureParameter)
        {
            if (storedProcedureParameter is null)
            {
                throw new ArgumentNullException(nameof(storedProcedureParameter));
            }

            return(GetSqlDbType(storedProcedureParameter.StoreType));
        }
Beispiel #10
0
        public static Type ClrType(this ModuleParameter storedProcedureParameter, bool asMethodParameter = false)
        {
            if (storedProcedureParameter is null)
            {
                throw new ArgumentNullException(nameof(storedProcedureParameter));
            }

            return(GetClrType(storedProcedureParameter.StoreType, storedProcedureParameter.Nullable, asMethodParameter));
        }
        protected virtual List <ModuleParameter> GetParameters(SqlConnection connection, string schema, string name)
        {
            var dtResult = new DataTable();
            var result   = new List <ModuleParameter>();

            // Validate this - based on https://stackoverflow.com/questions/20115881/how-to-get-stored-procedure-parameters-details/41330791

            var sql = $@"
SELECT  
    'Parameter' = p.name,  
    'Type'   = COALESCE(type_name(p.system_type_id), type_name(p.user_type_id)),  
    'Length'   = CAST(p.max_length AS INT),  
    'Precision'   = CAST(case when type_name(p.system_type_id) = 'uniqueidentifier' 
                then p.precision  
                else OdbcPrec(p.system_type_id, p.max_length, p.precision) end AS INT),  
    'Scale'   = CAST(OdbcScale(p.system_type_id, p.scale) AS INT),  
    'Order'  = CAST(parameter_id AS INT),  
    p.is_output AS output,
    'TypeName' = QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(TYPE_NAME(p.user_type_id))
    from sys.parameters p
	LEFT JOIN sys.table_types t ON t.user_type_id = p.user_type_id
    where object_id = object_id('{schema}.{name}')
    ORDER BY parameter_id;";

            var adapter = new SqlDataAdapter
            {
                SelectCommand = new SqlCommand(sql, connection)
            };

            adapter.Fill(dtResult);

            foreach (DataRow par in dtResult.Rows)
            {
                var parameterName = par["Parameter"].ToString();
                if (parameterName.StartsWith("@", StringComparison.Ordinal))
                {
                    parameterName = parameterName.Substring(1);
                }

                var parameter = new ModuleParameter()
                {
                    Name      = parameterName,
                    StoreType = par["Type"].ToString(),
                    Length    = par["Length"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Length"].ToString()),
                    Precision = par["Precision"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Precision"].ToString()),
                    Scale     = par["Scale"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Scale"].ToString()),
                    Output    = (bool)par["output"],
                    Nullable  = true,
                    TypeName  = par["TypeName"].ToString(),
                };

                result.Add(parameter);
            }

            return(result);
        }
        private void GenerateParameter(ModuleParameter parameter)
        {
            _sb.AppendLine("new SqlParameter");
            _sb.AppendLine("{");

            var sqlDbType = parameter.DbType();

            using (_sb.Indent())
            {
                _sb.AppendLine($"ParameterName = \"{parameter.Name}\",");

                if (_scaleTypes.Contains(sqlDbType))
                {
                    if (parameter.Precision > 0)
                    {
                        _sb.AppendLine($"Precision = {parameter.Precision},");
                    }
                    if (parameter.Scale > 0)
                    {
                        _sb.AppendLine($"Scale = {parameter.Scale},");
                    }
                }

                if (_lengthRequiredTypes.Contains(sqlDbType))
                {
                    _sb.AppendLine($"Size = {parameter.Length},");
                }


                if (!parameter.IsReturnValue)
                {
                    if (parameter.Output)
                    {
                        _sb.AppendLine("Direction = System.Data.ParameterDirection.InputOutput,");
                        AppendValue(parameter);
                    }
                    else
                    {
                        AppendValue(parameter);
                    }
                }
                else
                {
                    _sb.AppendLine("Direction = System.Data.ParameterDirection.Output,");
                }

                _sb.AppendLine($"SqlDbType = System.Data.SqlDbType.{sqlDbType},");

                if (sqlDbType == System.Data.SqlDbType.Structured)
                {
                    _sb.AppendLine($"TypeName = \"{parameter.TypeName}\",");
                }
            }

            _sb.Append("}");
        }
Beispiel #13
0
        public NetHelper SignalModuleEvent(string hgaddress, ModuleHelper m, ModuleParameter p)
        {
            string eventrouteurl = "http://" + hgaddress + "/api/HomeAutomation.HomeGenie/Interconnection/Events.Push/" + _homegenie.GetHttpServicePort();

            // propagate event to remote hg endpoint
            this.WebService(eventrouteurl)
            .Put(JsonConvert.SerializeObject(new ModuleEvent(m.SelectedModules[0], p)))
            .CallAsync();
            return(this);
        }
        private void AppendValue(ModuleParameter parameter)
        {
            var value = parameter.Nullable ? $"{parameter.Name} ?? Convert.DBNull" : $"{parameter.Name}";

            if (parameter.Output)
            {
                value = parameter.Nullable ? $"{parameter.Name}?._value ?? Convert.DBNull" : $"{parameter.Name}?._value";
            }
            _sb.AppendLine($"Value = {value},");
        }
Beispiel #15
0
 public static ModuleParameter ModuleParameterSet(TsList<ModuleParameter> parameters, string propertyName, object propertyValue)
 {
     var parameter = parameters.Find(mpar => mpar.Name == propertyName);
     if (parameter == null)
     {
         parameter = new ModuleParameter() { Name = propertyName };
         parameters.Add(parameter);
     }
     parameter.SetData(propertyValue);
     return parameter;
 }
Beispiel #16
0
        private bool IsValidControlModule(Module m)
        {
            bool            isValid = false;
            ModuleParameter widget  = m.GetProperty("Widget.DisplayModule");

            if (m.DeviceType != "Program" || (widget != null && !String.IsNullOrEmpty(widget.Value) && widget.Value != "homegenie/generic/program"))
            {
                isValid = true;
            }
            return(isValid);
        }
Beispiel #17
0
        //
        public bool SendMessage(string recipients, string subject, string messagetext)
        {
            this.mailfrom = "";
            ModuleParameter systemparam = _homegenie.Parameters.Find(delegate(ModuleParameter mp) { return(mp.Name == "Messaging.Email.Sender"); });

            if (systemparam != null && systemparam.Value != "")
            {
                this.mailfrom = systemparam.Value;
            }
            return(SendMessage(this.mailfrom, recipients, subject, messagetext));
        }
 private void DisplayProperty(ModuleParameter mp)
 {
     UiHelper.SafeInvoke(this, () =>
     {
         string name     = mp.Name.Substring(mp.Name.LastIndexOf(".") + 1);
         labelName.Text  = module.Name;
         labelField.Text = name;
         labelValue.Text = Math.Round(mp.DecimalValue, 1).ToString();
         currentProperty++;
     });
 }
        private void AppendValue(ModuleParameter parameter)
        {
            var value = parameter.Nullable ? $"{Code.Identifier(parameter.Name)} ?? Convert.DBNull" : $"{Code.Identifier(parameter.Name)}";

            if (parameter.Output)
            {
                value = parameter.Nullable ? $"{Code.Identifier(parameter.Name)}?._value ?? Convert.DBNull" : $"{Code.Identifier(parameter.Name)}?._value";
            }

            Sb.AppendLine($"Value = {value},");
        }
Beispiel #20
0
        private List <ModuleParameter> GetFunctionParameters(SqlConnection connection, long objectId)
        {
            var dtResult = new DataTable();
            var result   = new List <ModuleParameter>();

            // Validate this - based on https://stackoverflow.com/questions/20115881/how-to-get-stored-procedure-parameters-details/41330791
            var sql = $@"
SELECT  
    'Parameter' = p.name,  
    'Type'   = type_name(p.system_type_id),  
    'Length'   = CAST(p.max_length AS INT),  
    'Precision'   = CAST(case when type_name(p.system_type_id) = 'uniqueidentifier' 
                then p.precision  
                else OdbcPrec(p.system_type_id, p.max_length, p.precision) end AS INT),  
    'Scale'   = CAST(OdbcScale(p.system_type_id, p.scale) AS INT),  
    'Order'  = CAST(parameter_id AS INT),  
    p.is_output AS Output
    from sys.parameters p
    where object_id = {objectId}
    ORDER BY parameter_id;";

            var adapter = new SqlDataAdapter
            {
                SelectCommand = new SqlCommand(sql, connection)
            };

            adapter.Fill(dtResult);

            foreach (DataRow par in dtResult.Rows)
            {
                var parameterName = par["Parameter"].ToString();
                if (parameterName.StartsWith("@", StringComparison.Ordinal))
                {
                    parameterName = parameterName.Substring(1);
                }

                var parameter = new ModuleParameter()
                {
                    Name      = parameterName,
                    StoreType = par["Type"].ToString(),
                    Length    = par["Length"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Length"].ToString()),
                    Precision = par["Precision"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Precision"].ToString()),
                    Scale     = par["Scale"].GetType() == typeof(DBNull) ? (int?)null : int.Parse(par["Scale"].ToString()),
                    Output    = (bool)par["output"],
                    Nullable  = true,
                };

                result.Add(parameter);
            }

            return(result);
        }
Beispiel #21
0
        /// <summary>
        /// Get the specified parameterName from the Store.
        /// </summary>
        /// <param name="parameterName">Parameter name.</param>
        public ModuleParameter Get(string parameterName)
        {
            var             store = GetStore(storeName);
            ModuleParameter value = null;

            value = Service.Utility.ModuleParameterGet(store.Data, parameterName);
            // create parameter if does not exists
            if (value == null)
            {
                value = Service.Utility.ModuleParameterSet(store.Data, parameterName, "");
            }
            return(value);
        }
Beispiel #22
0
        private void eventClient_EventReceived(object sender, ServerSentEventReceivedEventArgs e)
        {
            Event  eventObject = JsonConvert.DeserializeObject <Event> (e.Message.Data);
            Module module      = GetModule(eventObject.Domain, eventObject.Source);

            if (module != null)
            {
                ModuleParameter property = module.GetProperty(eventObject.Property);
                if (property != null)
                {
                    module.SetProperty(property, eventObject.Value, eventObject.Timestamp);
                }
            }
        }
Beispiel #23
0
        /// <summary>
        /// 七、生成IBaseService
        /// </summary>
        private static void GenerationIBaseService()
        {
            Print("开始创建IBaseService");
            ModuleParameter moduleParameter = new ModuleParameter
            {
                FileName  = "IBaseService",
                Parameter = param,
                SavePath  = Methods.GetSlnPath + "\\" + IServiceProjectName + "\\Base",
                TempName  = "TempIBaseService"
            };

            Methods.CreateModules(moduleParameter);
            AddTask(IServiceProjectName);
            Print("IBaseService创建成功");
        }
Beispiel #24
0
        public ActionResult Update(ModuleParameter parameters)
        {
            var viewModel = MapFromClientParameters(parameters);

            byte[] lastModified = null;

            if (ModelState.IsValid)
            {
                var entity       = MasterFileService.GetById(viewModel.SharedViewModel.Id);
                var mappedEntity = viewModel.MapPropertiesToInstance(entity);
                lastModified = MasterFileService.Update(mappedEntity).LastModified;
            }

            return(Json(new { Error = string.Empty, Data = new { LastModified = lastModified } }, JsonRequestBehavior.AllowGet));
        }
Beispiel #25
0
        //TODO: add autodoc comment (HG Event forwarding)
        public NetHelper SignalModuleEvent(string hgAddress, ModuleHelper module, ModuleParameter parameter)
        {
            string eventRouteUrl = "http://" + hgAddress + "/api/HomeAutomation.HomeGenie/Interconnection/Events.Push/" + homegenie.GetHttpServicePort();

            // propagate event to remote hg endpoint
            this.WebService(eventRouteUrl)
            .Put(JsonConvert.SerializeObject(
                     new ModuleEvent(module.SelectedModules[0], parameter),
                     new JsonSerializerSettings()
            {
                Culture = System.Globalization.CultureInfo.InvariantCulture
            }
                     ))
            .CallAsync();
            return(this);
        }
Beispiel #26
0
        /// <summary>
        /// 十、生成Service
        /// </summary>
        private static void GenerationService()
        {
            Print("开始创建Service");
            ModuleParameter moduleParameter = new ModuleParameter
            {
                FileSuffix = "Service",
                Parameter  = param,
                SavePath   = Methods.GetSlnPath + "\\" + ServiceProjectName,
                Tables     = db.DbMaintenance.GetTableInfoList().Select(it => it.Name).ToList(),
                TempName   = "TempService"
            };

            Methods.CreateModules(moduleParameter);
            AddTask(ServiceProjectName);
            Print("Service创建成功");
        }
Beispiel #27
0
        // TODO: add autodoc comment (HG Event forwarding)
        public NetHelper SignalModuleEvent(string hgAddress, ModuleHelper module, ModuleParameter parameter)
        {
            var eventRouteUrl = "http://" + hgAddress + "/api/" + Domains.HomeAutomation_HomeGenie + "/Interconnection/Events.Push/" + _homegenie.GetHttpServicePort();

            // propagate event to remote hg endpoint
            Utility.RunAsyncTask(() =>
            {
                WebService(eventRouteUrl)
                .Put(JsonConvert.SerializeObject(new ModuleEvent(module.Instance, parameter), new JsonSerializerSettings()
                {
                    Culture = System.Globalization.CultureInfo.InvariantCulture
                }))
                .Call();
            });
            return(this);
        }
Beispiel #28
0
        /// <summary>
        /// 五、生成BaseRepository
        /// </summary>
        private static void GenerationBaseRepository()
        {
            Print("开始创建BaseRepository");
            ModuleParameter moduleParameter = new ModuleParameter
            {
                FileName  = "BaseRepository",
                Parameter = param,
                SavePath  = Methods.GetSlnPath + "\\" + RepositoryProjectName + "\\Base",
                TempName  = "TempBaseRepository"
            };

            Methods.CreateModules(moduleParameter);

            AddTask(RepositoryProjectName);
            Print("BaseRepository创建成功");
        }
Beispiel #29
0
        /// <summary>
        /// Gets the system settings parameter with the specified name.
        /// </summary>
        /// <param name="parameter">Parameter.</param>
        public ModuleParameter Parameter(string parameter)
        {
            var systemParameter = homegenie.Parameters.Find(delegate(ModuleParameter mp) { return(mp.Name == parameter); });

            // create parameter if does not exists
            if (systemParameter == null)
            {
                systemParameter = new ModuleParameter()
                {
                    Name = parameter
                };
                homegenie.Parameters.Add(systemParameter);
            }

            return(systemParameter);
        }
Beispiel #30
0
        public static string WaitModuleParameterChange(Module module, string parameterName)
        {
            string value = "";
            // TODO make it as a function _waitModuleParameterChange(mod, parname, timeout)
            ModuleParameter parameter  = null;
            var             start      = DateTime.UtcNow.Ticks;
            var             now        = start;
            int             maxSecWait = 10; // 10 seconds max wait

            while (parameter == null && TimeSpan.FromTicks(now - start).TotalSeconds <= maxSecWait)
            {
                // wait for maxSecWait seconds if the parameterName doesn't exit yet - it migt not have been initialized yet
                // classes that use encryption are require many messages to be exchanged
                now       = DateTime.UtcNow.Ticks;
                parameter = Service.Utility.ModuleParameterGet(module, parameterName);
                if (parameter == null)
                {
                    //Console.WriteLine("Thread - " + System.Threading.Thread.CurrentThread.ManagedThreadId + " Waiting .5s for " + parameterName + ". Waited " + TimeSpan.FromTicks(now - start).TotalSeconds);
                    Thread.Sleep(500);
                }
            }

            if (parameter != null)
            {
                var updated = DateTime.UtcNow.Ticks; //p.UpdateTime.Ticks - (TimeSpan.TicksPerSecond * 1);
                //
                Thread.Sleep(500);
                //
                int timeout       = 0;
                int maxWait       = 50; //(50 * 100ms ticks = 5000 ms)
                int tickFrequency = 100;
                //
                // I don't think that it will ever get into the while loop because the "updated" was just reset
                // what's the change the "parameter.UpdateTime.Ticks" was updated after "updated" was reset
                // we'll accept 1 second old values as still current values
                while ((TimeSpan.FromTicks(updated - parameter.UpdateTime.Ticks).TotalSeconds > 1 /*&& (DateTime.UtcNow.Ticks - p.UpdateTime.Ticks > 5 * TimeSpan.TicksPerSecond)*/) && timeout++ < maxWait)
                {
                    Thread.Sleep(tickFrequency);
                }
                //
                if (timeout < maxWait)
                {
                    value = parameter.Value;
                }
            }
            return(value);
        }