diff --git a/im-client/pom.xml b/im-client/pom.xml
index 8e3d245..c7cea70 100644
--- a/im-client/pom.xml
+++ b/im-client/pom.xml
@@ -37,6 +37,12 @@
com.beust
jcommander
+
+
+ com.konghq
+ unirest-java
+ 3.13.6
+
\ No newline at end of file
diff --git a/im-client/src/main/java/net/sopod/soim/client/ClientMain.java b/im-client/src/main/java/net/sopod/soim/client/ClientMain.java
index 0e3bc30..b81909f 100644
--- a/im-client/src/main/java/net/sopod/soim/client/ClientMain.java
+++ b/im-client/src/main/java/net/sopod/soim/client/ClientMain.java
@@ -3,10 +3,8 @@ package net.sopod.soim.client;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import net.sopod.soim.client.cmd.CmdDispatcher;
import net.sopod.soim.client.cmd.CmdStarter;
import net.sopod.soim.client.config.GuiceIoc;
-import net.sopod.soim.client.net.ImNetClient;
/**
* Main
@@ -19,15 +17,16 @@ import net.sopod.soim.client.net.ImNetClient;
*/
public class ClientMain {
- public static void main(String[] args) throws InterruptedException {
+ public static void main(String[] args) {
// ImNetClient client = new ImNetClient();
// client.connect("127.0.0.1", 8088);
+
+ // 创建 ioc 容器
GuiceIoc guiceIoc = new GuiceIoc(ClientMain.class);
Injector injector = Guice.createInjector(Stage.PRODUCTION, guiceIoc);
- // dispatcher
- CmdDispatcher cmdDispatcher = new CmdDispatcher(injector);
- // starter
- CmdStarter cmdStarter = new CmdStarter(cmdDispatcher);
+
+ // 启动 cmd scanner
+ CmdStarter cmdStarter = injector.getInstance(CmdStarter.class);
cmdStarter.start();
}
diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java b/im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java
index 2adf415..7f8cfba 100644
--- a/im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java
+++ b/im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java
@@ -3,6 +3,8 @@ package net.sopod.soim.client.cmd;
import com.beust.jcommander.Parameter;
import lombok.Data;
+import java.util.List;
+
/**
* ArgsLogin
*
@@ -12,10 +14,13 @@ import lombok.Data;
@Data
public class ArgsLogin {
- @Parameter(names = {"-u", "-account"}, description = "账号")
+ @Parameter
+ private List parameters;
+
+ @Parameter(names = {"-u", "-account"}, required = true, description = "账号")
private String account;
- @Parameter(names = {"-p", "-password"}, description = "密码", password = true)
+ @Parameter(names = {"-p", "-password"}, required = true, description = "密码", password = true)
private String password;
}
diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java
index 94ea555..c231bc2 100644
--- a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java
+++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java
@@ -1,7 +1,11 @@
package net.sopod.soim.client.cmd;
import com.beust.jcommander.JCommander;
+import com.beust.jcommander.ParameterException;
+import com.google.inject.Inject;
import com.google.inject.Injector;
+import com.google.inject.Singleton;
+import net.sopod.soim.client.cmd.handler.CmdHandler;
import net.sopod.soim.client.logger.Logger;
/**
@@ -17,36 +21,48 @@ import net.sopod.soim.client.logger.Logger;
* @author tmy
* @date 2022-04-25 10:28
*/
+@Singleton
public class CmdDispatcher {
private final Injector injector;
+ @Inject
public CmdDispatcher(Injector injector) {
this.injector = injector;
}
+ @SuppressWarnings("unchecked")
public void dispatchCmd(String cmdStr) {
- Logger.info("dispatch cmd: {}", cmdStr);
- int idx = cmdStr.indexOf(" ");
- String cmd = idx == -1 ? cmdStr : cmdStr.substring(0, idx);
- String argsStr = idx == -1 ? "" : cmdStr.substring(idx + 1);
+ String[] cmdArgs = cmdStr.trim().split("[ \t]+");
+ String cmd = cmdArgs[0];
+ String[] args = new String[cmdArgs.length - 1];
+ if (args.length > 0) {
+ System.arraycopy(cmdArgs, 1, args, 0, args.length);
+ }
+ CmdEnum cmdEnum = CmdEnum.getValue(cmd);
+ if (cmdEnum == null) {
+ Logger.error("未知指令: {}", cmd);
+ return;
+ }
+ Class extends CmdHandler>> handlerClass = cmdEnum.getHandlerClass();
+ CmdHandler> cmdHandler = injector.getInstance(handlerClass);
+ Object argsInstance = cmdHandler.newArgsInstance();
+ try {
+ JCommander.newBuilder()
+ .addObject(argsInstance)
+ .build()
+ .parse(args);
+ } catch (ParameterException e) {
+ String message = e.getMessage();
+ this.parseParameterExceptionMessage(message);
+ return;
+ }
+ ((CmdHandler