public static async Task HandleInput(MessageContainer data) { ComponentActionDelegate actionHandler = ResolveCommandHandler(data); if (null != actionHandler) { await ExecuteCommand(actionHandler, data).ConfigureAwait(false); } }
public static async Task ExecuteCommand(ComponentActionDelegate actionHandler, MessageContainer data) { try { await(actionHandler?.Invoke(data)).ConfigureAwait(false); } catch (Exception ex) { Debug.WriteLine(data.Target, ex.Message + "::" + ex.StackTrace); data.AddValue("Error", ex.Message); data.AddValue("StackTrace", ex.StackTrace); await HandleOutput(data).ConfigureAwait(false); } }
private static void SetupCommandHandler(ComponentBase instance) { foreach (MethodInfo method in instance.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)) { IEnumerable <ActionAttribute> actionAttributes = method.GetCustomAttributes <ActionAttribute>(true); if (actionAttributes.Count() > 0) { ComponentActionDelegate actionHandler = BuildActionHandlerDelegate(method, instance); foreach (ActionAttribute actionAttribute in actionAttributes) { instance.commandHandlers.Add(actionAttribute.Action.ToUpperInvariant(), actionHandler); } } } }
private async Task RegisterTimerTask(MessageContainer data) { int param; TimerItem <Tuple <ComponentActionDelegate, MessageContainer> > timerItem = new TimerItem <Tuple <ComponentActionDelegate, MessageContainer> >(); if (!int.TryParse(data.ResolveParameter("Interval", 0), out param)) { param = 1000; } timerItem.Interval = TimeSpan.FromMilliseconds(param); if (!int.TryParse(data.ResolveParameter("Repetitions", 1), out param)) { param = 0; } timerItem.Repetition = param; string timerAction = data.ResolveParameter("TimerAction", 2); string[] actionParams = timerAction.GetTokens().ToArray(); MessageContainer timerActionData = new MessageContainer(data.SessionId, this, actionParams); ComponentActionDelegate actionDelegate = ComponentHandler.ResolveCommandHandler(timerActionData); if (null == actionDelegate || actionParams == null || actionParams.Length == 0) { data.AddValue("Register", "Could not parse task action. Please check the command provided."); await ComponentHandler.HandleOutput(data).ConfigureAwait(false); return; } timerItem.Data = new Tuple <ComponentActionDelegate, MessageContainer>(actionDelegate, timerActionData); timerItem.TimerAction += TimerAction; await timerWheel.Add(timerItem).ConfigureAwait(false); data.AddValue("Register", $"Task succcessfully registered with ID {timerItem.TimerItemId}"); await ComponentHandler.HandleOutput(data).ConfigureAwait(false); }