Beispiel #1
0
        private bool HookCommand(string message)
        {
            try
            {
                var args = new CommandArguments(message.Substring(1));
                switch (args.Command.ToLower())
                {
                case "color":
                {
                    var newColor = Color.FromName(args.Get <string>(0));
                    if (newColor.IsKnownColor)
                    {
                        SendCommand(InterChatCommandType.ChangeColor, newColor.ToArgb());
                    }
                }
                break;

                case "speech":
                {
                    var content = args.GetAll(0);
                    if (!string.IsNullOrWhiteSpace(content))
                    {
                        SendCommand(InterChatCommandType.Speech, content);
                    }
                }
                break;

                case "go":
                {
                    var serverIndex = args.Get <int>(0);
                    var userName    = args.Get <string>(1, _userName);
                    ClientLauncher.Instance.Execute(serverIndex, userName);
                }
                break;

                case "server":
                {
                    var servers = ClientLauncher.Instance.Servers;
                    for (var serverIndex = 0; serverIndex < servers.Count; ++serverIndex)
                    {
                        var server = servers[serverIndex];
                        AppendInternalLog(string.Format("[{0}] {1} ({2}:{3})", serverIndex, server.Name,
                                                        server.Host, server.Port));
                    }
                }
                break;

                default:
                    return(false);
                }
                return(true);
            }
            catch (Exception exception)
            {
                ShowError("Invalid command: {0}", exception.Message);
            }
            return(false);
        }
Beispiel #2
0
        public override void Run(Configuration config, CommandArguments args)
        {
            base.Run(config, args);

            var target            = args.GetTarget(this);
            var configurationName = args.Get(this, "configuration");
            var platforms         = args.GetAll(this, "platform");

            RunLibraryBuildFor(config, configurationName, platforms);
            RunFrontendBuildFor(config, configurationName);
            CopyBuildResult(config, target, configurationName);
        }
Beispiel #3
0
        private bool HookCommand(string message)
        {
            try
            {
                var args = new CommandArguments(message.Substring(1));
                switch (args.Command.ToLower())
                {
                    case "color":
                        {
                            var newColor = Color.FromName(args.Get<string>(0));
                            if (newColor.IsKnownColor)
                                SendCommand(InterChatCommandType.ChangeColor, newColor.ToArgb());
                        }
                        break;

                    case "speech":
                        {
                            var content = args.GetAll(0);
                            if (!string.IsNullOrWhiteSpace(content))
                                SendCommand(InterChatCommandType.Speech, content);
                        }
                        break;

                    case "go":
                        {
                            var serverIndex = args.Get<int>(0);
                            var userName = args.Get<string>(1, _userName);
                            ClientLauncher.Instance.Execute(serverIndex, userName);
                        }
                        break;

                    case "server":
                        {
                            var servers = ClientLauncher.Instance.Servers;
                            for (var serverIndex = 0; serverIndex < servers.Count; ++serverIndex)
                            {
                                var server = servers[serverIndex];
                                AppendInternalLog(string.Format("[{0}] {1} ({2}:{3})", serverIndex, server.Name,
                                                                server.Host, server.Port));
                            }

                        }
                        break;

                    default:
                        return false;
                }
                return true;
            }
            catch (Exception exception)
            {
                ShowError("Invalid command: {0}", exception.Message);
            }
            return false;
        }
Beispiel #4
0
        private static bool InvokeHandler(Entity admin, CommandArguments args, object handler, CommandHandlerInfo handlerInfo)
        {
            if (handlerInfo.Parameters.Length == 0)
                return (bool) handlerInfo.Method.Invoke(handler, new object[0]);

            var objects = new List<object>();

            // 첫 번재 인자로 admin을 요청할 경우에는 admin을 넣어준다.
            if (handlerInfo.Parameters[0].ParameterType == typeof (Entity))
                objects.Add(admin);

            for (var index = 1; index < handlerInfo.Parameters.Length; ++index)
            {
                var argsIndex = index - 1;
                var parameter = handlerInfo.Parameters[index];

                var isAfterAll = false;
                object value = null;

                // CommandArgument의 속성에 따라 value를 미리 구해본다.
                if (parameter.IsOptional)
                    value = parameter.Default;

                if (parameter.IsAfterAll)
                {
                    // AfterAll은 꼭 마지막에 와야한다.
                    Debug.Assert(index == handlerInfo.Parameters.Length - 1);
                    value = args.GetAll(argsIndex);
                    isAfterAll = true;
                }

                // Attribute로부터 값을 구하지 못했고, 입력된 args도 없다면 인자 부족으로 종료한다.
                if (args.Count <= argsIndex)
                {
                    if (value == null)
                        return false;
                }
                else
                {
                    // AfterAll이 아니면 값을 가져올 수 있다.
                    if (!isAfterAll)
                    {
                        // Entity 형일 경우 int를 받아서 Entity를 가져온다.
                        if (parameter.ParameterType == typeof (Entity))
                        {
                            if (!args.Is<int>(argsIndex))
                                return false;

                            var targetEntityId = args.Get<int>(argsIndex);
                            var targetEntity = EntityManager.Instance.At(targetEntityId);
                            if (targetEntity == null)
                                return false;

                            value = targetEntity;
                        }
                        else
                        {
                            // 잘못된 인자가 넘어왔다면 인자 오류로 종료한다.
                            if (!args.IsType(argsIndex, parameter.ParameterType))
                                return false;

                            value = args.GetValue(argsIndex, parameter.ParameterType);
                        }
                    }
                }

                objects.Add(value);
            }

            return (bool) handlerInfo.Method.Invoke(handler, objects.ToArray());
        }