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); }
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); }
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; }
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()); }