Exemplo n.º 1
0
 protected void OnFireTrigger(BindingValue value)
 {
     HeliosTriggerEventArgs args = new HeliosTriggerEventArgs(value);
     HeliosTriggerHandler handler = TriggerFired;
     if (handler != null)
     {
         handler.Invoke(this, args);
     }
 }
Exemplo n.º 2
0
        public void OnTriggerFired(object trigger, HeliosTriggerEventArgs e)
        {
            if (IsActive)
            {
                if (_executing)
                {
                    ConfigManager.LogManager.LogWarning("Binding loop condition detected, binding aborted. (Binding=\"" + Description + "\")");
                }
                else
                {
                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Info)
                    {
                        ConfigManager.LogManager.LogInfo("Binding triggered. (Binding=\"" + Description + "\", Value=\"" + e.Value.StringValue + "\")");
                    }
                    try
                    {
                        _executing = true;
                        BindingValue value = BindingValue.Empty;
                        //LuaInterpreter["TriggerValue"] = e.Value.NaitiveValue;
                        switch (e.Value.NaitiveType)
                        {
                        case BindingValueType.Boolean:
                            LuaInterpreter["TriggerValue"] = e.Value.BoolValue;
                            break;

                        case BindingValueType.String:
                            LuaInterpreter["TriggerValue"] = e.Value.StringValue;
                            break;

                        case BindingValueType.Double:
                            LuaInterpreter["TriggerValue"] = e.Value.DoubleValue;
                            break;
                        }

                        if (HasCondition)
                        {
                            try
                            {
                                object[] conditionReturnValues = LuaInterpreter.DoString(_condition);
                                if (conditionReturnValues.Length >= 1)
                                {
                                    BindingValue returnValue = CreateBindingValue(conditionReturnValues[0]);
                                    if (returnValue.BoolValue == false)
                                    {
                                        if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                        {
                                            ConfigManager.LogManager.LogDebug("Binding condition evaluated to false, binding aborted. (Binding=\"" + Description + "\")");
                                        }
                                        return;
                                    }
                                }
                            }
                            catch (LuaScriptException luaException)
                            {
                                ConfigManager.LogManager.LogWarning("Binding condition lua error. (Error=\"" + luaException.Message + "\", Condition Script=\"" + Condition + "\", Binding=\"" + Description + "\")");
                            }
                            catch (Exception conditionException)
                            {
                                ConfigManager.LogManager.LogError("Binding condition has thown an unhandled exception. (Binding=\"" + Description + "\", Condition=\"" + Condition + "\")", conditionException);
                                return;
                            }
                        }

                        switch (ValueSource)
                        {
                        case BindingValueSources.StaticValue:
                            value = _value;
                            break;

                        case BindingValueSources.TriggerValue:
                            if (_needsConversion && _converter != null)
                            {
                                value = _converter.Convert(e.Value, Trigger.Unit, Action.Unit);
                                if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                {
                                    ConfigManager.LogManager.LogDebug("Binding converted value. (Binding=\"" + Description + "\", Original Value=\"" + e.Value.StringValue + "\", New Value=\"" + value.StringValue + "\")");
                                }
                            }
                            else
                            {
                                value = e.Value;
                            }
                            break;

                        case BindingValueSources.LuaScript:
                            try
                            {
                                object[] returnValues = LuaInterpreter.DoString(Value);
                                if (returnValues.Length >= 1)
                                {
                                    value = CreateBindingValue(returnValues[0]);
                                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                    {
                                        ConfigManager.LogManager.LogDebug("Binding value lua script evaluated (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\", ReturnValue=\"" + returnValues[0] + "\")");
                                    }
                                }
                                else
                                {
                                    ConfigManager.LogManager.LogWarning("Binding value lua script did not return a value. (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\")");
                                }
                            }
                            catch (LuaScriptException luaException)
                            {
                                ConfigManager.LogManager.LogWarning("Binding value lua error. (Error=\"" + luaException.Message + "\", Value Script=\"" + Value + "\", Binding=\"" + Description + "\")");
                            }
                            catch (Exception valueException)
                            {
                                ConfigManager.LogManager.LogError("Binding value lua script has thown an unhandled exception. (Binding=\"" + Description + "\", Value Script=\"" + Value + "\")", valueException);
                            }
                            break;
                        }

                        Action.Target.Dispatcher.Invoke(new Action <BindingValue, bool>(Execute), value, BypassCascadingTriggers);
                    }
                    catch (Exception ex)
                    {
                        ConfigManager.LogManager.LogError("Binding threw unhandled exception. (Binding=\"" + Description + "\")", ex);
                    }
                    _executing = false;
                }
            }
        }
Exemplo n.º 3
0
        public void OnTriggerFired(object trigger, HeliosTriggerEventArgs e)
        {
            if (IsActive)
            {
                if (_executing)
                {
                    ConfigManager.LogManager.LogWarning("Binding loop condition detected, binding aborted. (Binding=\"" + Description + "\")");
                }
                else
                {
                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Info)
                    {
                        ConfigManager.LogManager.LogInfo("Binding triggered. (Binding=\"" + Description + "\", Value=\"" + e.Value.StringValue + "\")");
                    }
                    try
                    {
                        _executing = true;
                        BindingValue value = BindingValue.Empty;
                        //LuaInterpreter["TriggerValue"] = e.Value.NaitiveValue;
                        switch (e.Value.NaitiveType)
                        {
                            case BindingValueType.Boolean:
                                LuaInterpreter["TriggerValue"] = e.Value.BoolValue;
                                break;
                            case BindingValueType.String:
                                LuaInterpreter["TriggerValue"] = e.Value.StringValue;
                                break;
                            case BindingValueType.Double:
                                LuaInterpreter["TriggerValue"] = e.Value.DoubleValue;
                                break;
                        }

                        if (HasCondition)
                        {
                            try
                            {
                                object[] conditionReturnValues = LuaInterpreter.DoString(_condition);
                                if (conditionReturnValues.Length >= 1)
                                {
                                    BindingValue returnValue = CreateBindingValue(conditionReturnValues[0]);
                                    if (returnValue.BoolValue == false)
                                    {
                                        if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                        {
                                            ConfigManager.LogManager.LogDebug("Binding condition evaluated to false, binding aborted. (Binding=\"" + Description + "\")");
                                        }
                                        return;
                                    }
                                }
                            }
                            catch (LuaScriptException luaException)
                            {
                                ConfigManager.LogManager.LogWarning("Binding condition lua error. (Error=\"" + luaException.Message + "\", Condition Script=\"" + Condition + "\", Binding=\"" + Description + "\")");
                            }
                            catch (Exception conditionException)
                            {
                                ConfigManager.LogManager.LogError("Binding condition has thown an unhandled exception. (Binding=\"" + Description + "\", Condition=\"" + Condition + "\")", conditionException);
                                return;
                            }
                        }

                        switch (ValueSource)
                        {
                            case BindingValueSources.StaticValue:
                                value = _value;
                                break;
                            case BindingValueSources.TriggerValue:
                                if (_needsConversion && _converter != null)
                                {
                                    value = _converter.Convert(e.Value, Trigger.Unit, Action.Unit);
                                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                    {
                                        ConfigManager.LogManager.LogDebug("Binding converted value. (Binding=\"" + Description + "\", Original Value=\"" + e.Value.StringValue + "\", New Value=\"" + value.StringValue + "\")");
                                    }
                                }
                                else
                                {
                                    value = e.Value;
                                }
                                break;
                            case BindingValueSources.LuaScript:
                                try
                                {

                                    object[] returnValues = LuaInterpreter.DoString(Value);
                                    if (returnValues.Length >= 1)
                                    {
                                        value = CreateBindingValue(returnValues[0]);
                                        if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                        {
                                            ConfigManager.LogManager.LogDebug("Binding value lua script evaluated (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\", ReturnValue=\"" + returnValues[0] + "\")");
                                        }
                                    }
                                    else
                                    {
                                        ConfigManager.LogManager.LogWarning("Binding value lua script did not return a value. (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\")");
                                    }
                                }
                                catch (LuaScriptException luaException)
                                {
                                    ConfigManager.LogManager.LogWarning("Binding value lua error. (Error=\"" + luaException.Message + "\", Value Script=\"" + Value + "\", Binding=\"" + Description + "\")");
                                }
                                catch (Exception valueException)
                                {
                                    ConfigManager.LogManager.LogError("Binding value lua script has thown an unhandled exception. (Binding=\"" + Description + "\", Value Script=\"" + Value + "\")", valueException);
                                }
                                break;
                        }

                        Action.Target.Dispatcher.Invoke(new Action<BindingValue, bool>(Execute), value, BypassCascadingTriggers);
                    }
                    catch (Exception ex)
                    {
                        ConfigManager.LogManager.LogError("Binding threw unhandled exception. (Binding=\"" + Description + "\")", ex);
                    }
                    _executing = false;
                }
            }
        }
Exemplo n.º 4
0
        public void OnTriggerFired(object trigger, HeliosTriggerEventArgs e)
        {
            if (IsActive)
            {
                TraceTriggerFired();
                if (_executing)
                {
                    ConfigManager.LogManager.LogWarning("Binding loop condition detected, binding aborted. (Binding=\"" + Description + "\")");
                }
                else
                {
                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Info)
                    {
                        ConfigManager.LogManager.LogInfo("Binding triggered. (Binding=\"" + Description + "\", Value=\"" + e.Value.StringValue + "\")");
                    }
                    try
                    {
                        _executing = true;
                        BindingValue value = BindingValue.Empty;
                        //LuaInterpreter["TriggerValue"] = e.Value.NaitiveValue;
                        switch (e.Value.NaitiveType)
                        {
                        case BindingValueType.Boolean:
                            LuaInterpreter["TriggerValue"] = e.Value.BoolValue;
                            break;

                        case BindingValueType.String:
                            LuaInterpreter["TriggerValue"] = e.Value.StringValue;
                            break;

                        case BindingValueType.Double:
                            LuaInterpreter["TriggerValue"] = e.Value.DoubleValue;
                            break;
                        }

                        if (HasCondition)
                        {
                            try
                            {
                                object[] conditionReturnValues = LuaInterpreter.DoString(_condition);
                                if (conditionReturnValues.Length >= 1)
                                {
                                    BindingValue returnValue = CreateBindingValue(conditionReturnValues[0]);
                                    if (returnValue.BoolValue == false)
                                    {
                                        if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                        {
                                            ConfigManager.LogManager.LogDebug("Binding condition evaluated to false, binding aborted. (Binding=\"" + Description + "\")");
                                        }
                                        EndTraceTriggerFired();
                                        return;
                                    }
                                }
                            }
                            catch (LuaScriptException luaException)
                            {
                                ConfigManager.LogManager.LogWarning("Binding condition lua error. (Error=\"" + luaException.Message + "\", Condition Script=\"" + Condition + "\", Binding=\"" + Description + "\")");
                            }
                            catch (Exception conditionException)
                            {
                                ConfigManager.LogManager.LogError("Binding condition has thown an unhandled exception. (Binding=\"" + Description + "\", Condition=\"" + Condition + "\")", conditionException);
                                EndTraceTriggerFired();
                                return;
                            }
                        }

                        switch (ValueSource)
                        {
                        case BindingValueSources.StaticValue:
                            value = _value;
                            break;

                        case BindingValueSources.TriggerValue:
                            if (_needsConversion && _converter != null)
                            {
                                value = _converter.Convert(e.Value, Trigger.Unit, Action.Unit);
                                if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                {
                                    ConfigManager.LogManager.LogDebug("Binding converted value. (Binding=\"" + Description + "\", Original Value=\"" + e.Value.StringValue + "\", New Value=\"" + value.StringValue + "\")");
                                }
                            }
                            else
                            {
                                value = e.Value;
                            }
                            break;

                        case BindingValueSources.LuaScript:
                            try
                            {
                                object[] returnValues = LuaInterpreter.DoString(Value);
                                if ((returnValues != null) && (returnValues.Length >= 1))
                                {
                                    value = CreateBindingValue(returnValues[0]);
                                    if (ConfigManager.LogManager.LogLevel >= LogLevel.Debug)
                                    {
                                        ConfigManager.LogManager.LogDebug("Binding value lua script evaluated (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\", ReturnValue=\"" + returnValues[0] + "\")");
                                    }
                                }
                                else
                                {
                                    ConfigManager.LogManager.LogWarning("Binding value lua script did not return a value. (Binding=\"" + Description + "\", Expression=\"" + Value + "\", TriggerValue=\"" + LuaInterpreter["TriggerValue"] + "\")");
                                }
                            }
                            catch (LuaScriptException luaException)
                            {
                                ConfigManager.LogManager.LogWarning("Binding value lua error. (Error=\"" + luaException.Message + "\", Value Script=\"" + Value + "\", Binding=\"" + Description + "\")");
                            }
                            catch (Exception valueException)
                            {
                                // these are exceptions thrown by the Lua implementation
                                ConfigManager.LogManager.LogError("Binding value lua script has thown an unhandled exception. (Binding=\"" + Description + "\", Value Script=\"" + Value + "\")", valueException);
                            }
                            break;
                        }
                        if (Action.Target.Dispatcher == null)
                        {
                            // if we don't have a dispatcher, likely because this is a composite device, we use the dispatcher object from the owner of the trigger
                            // this seems to work and was the best I could come up with, but it is very much a kludge because I could not work out the proper way
                            // to have a dispatcher created for Actions
                            Action.Target.Dispatcher = Trigger.Owner.Dispatcher;
                        }
                        Action.Target.Dispatcher.Invoke(new Action <BindingValue, bool>(Execute), value, BypassCascadingTriggers);
                    }
                    catch (Exception ex)
                    {
                        ConfigManager.LogManager.LogError("Binding threw unhandled exception. (Binding=\"" + Description + "\")", ex);
                    }
                    _executing = false;
                }
                EndTraceTriggerFired();
            }
        }