protected void OnFireTrigger(BindingValue value) { HeliosTriggerEventArgs args = new HeliosTriggerEventArgs(value); HeliosTriggerHandler handler = TriggerFired; if (handler != null) { handler.Invoke(this, args); } }
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; } } }
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; } } }
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(); } }