Ejemplo n.º 1
0
        internal async Task Invoke(List <string> command, MethodContext context)
        {
            command.RemoveRange(0, Structure.Count);             // Remove uneded structure part of command
            object[] formattedParameters = new object[Parameters.Count];

            for (int i = 0; i < Parameters.Count; i++)
            {
                YParameter parameter = Parameters[i];

                if (parameter.IsParam)
                {
                    if (command.Count - i < 0)
                    {
                        break;
                    }

                    Type     indexType = parameter.Type.GetElementType();
                    object[] param     = (object[])Activator.CreateInstance(parameter.Type, new object[] { command.Count - i });

                    for (int a = 0; a < command.Count - i; a++)
                    {
                        param[a] = ParseParameter(command[i + a], indexType);
                    }

                    formattedParameters[i] = param;
                    break;
                }

                // Check and insert optinal parameter if there is one
                if (i >= command.Count || (command[i] == null && parameter.IsOptional))
                {
                    formattedParameters[i] = parameter.HasDefault ? parameter.Default : null;
                    continue;
                }

                formattedParameters[i] = ParseParameter(command[i], parameter.Type);
            }

            Parent.SetContext(context);
            await Parent.RunCommand(method.Name, formattedParameters.Length, formattedParameters);
        }
Ejemplo n.º 2
0
        internal YCommand(MethodInfo method)
        {
            Command command = method.GetCustomAttribute <Command>();
            Summary summary = method.GetCustomAttribute <Summary>();
            Name    name    = method.GetCustomAttribute <Name>();

            ParameterInfo[] parameters = method.GetParameters();

            Structure   = command.CommandStructure;
            Parameters  = new List <YParameter>();
            Name        = name?.Value ?? method.Name;
            MethodName  = method.Name;
            Summary     = summary?.Value;
            this.method = method;

            for (int i = 0; i < parameters.Length; i++)
            {
                YParameter parameter = new YParameter(parameters[i]);

                Parameters.Add(parameter);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Check if parameters is matching the YCommand.
        /// </summary>
        /// <param name="command"></param>
        /// <param name="yCommand"></param>
        /// <returns></returns>
        int ValidateParams(List <string> command, YCommand yCommand)
        {
            for (int i = 0; i < yCommand.Parameters.Count; i++)
            {
                YParameter parameter    = yCommand.Parameters[i];
                Type       expectedType = parameter.Type;

                if (i + StructureLength >= command.Count)
                {
                    // Check the last params parameters here
                    if (parameter.IsParam)
                    {
                        return(yCommand.Parameters.Count);
                    }

                    if (parameter.IsOptional)
                    {
                        continue;
                    }

                    return(-1);
                }

                if (parameter.IsParam)
                {
                    return(yCommand.Parameters.Count);
                }

                if (!IsOfType(command[StructureLength + i], expectedType))
                {
                    return(-1);
                }
            }

            return(yCommand.Parameters.Count);
        }