コード例 #1
0
        public static async Task HandleInput(MessageContainer data)
        {
            ComponentActionDelegate actionHandler = ResolveCommandHandler(data);

            if (null != actionHandler)
            {
                await ExecuteCommand(actionHandler, data).ConfigureAwait(false);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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);
                    }
                }
            }
        }
コード例 #4
0
        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);
        }