From 25a862d5d0871c0ab9ea4b131e3cdf85e6ef272a Mon Sep 17 00:00:00 2001
From: tangmingyou <234767776@qq.com>
Date: Mon, 25 Apr 2022 23:40:31 +0800
Subject: [PATCH] im client
---
im-client/pom.xml | 6 +
.../net/sopod/soim/client/ClientMain.java | 13 +-
.../net/sopod/soim/client/cmd/ArgsLogin.java | 9 +-
.../sopod/soim/client/cmd/CmdDispatcher.java | 52 +-
.../net/sopod/soim/client/cmd/CmdEnum.java | 28 +-
.../net/sopod/soim/client/cmd/CmdStarter.java | 8 +-
.../client/{ => cmd}/handler/CmdHandler.java | 2 +-
.../{ => cmd}/handler/NonArgsHandler.java | 4 +-
.../soim/client/config/ClientConfig.java | 18 +
.../sopod/soim/client/config/GuiceIoc.java | 9 +-
.../soim/client/handler/ExitHandler.java | 1 +
.../soim/client/handler/LoginCmdHandler.java | 23 +-
.../net/sopod/soim/client/logger/Logger.java | 10 +-
.../soim/client/model/dto/LoginResDTO.java | 24 +
.../soim/client/session/SoImSession.java | 81 +
.../sopod/soim/client/util/HttpClient.java | 46 +
.../net/sopod/soim/common/util/Jackson.java | 16 +-
.../registry/ProtoMessageHandlerRegistry.java | 6 +-
.../net/sopod/soim/data/msg/auth/Auth.java | 1306 ++++++++++++++++-
.../src/main/resources/protoSerialNoTable.txt | 14 +-
.../main/resources/protobuf/auth/Auth.proto | 12 +-
pom.xml | 14 +
22 files changed, 1649 insertions(+), 53 deletions(-)
rename im-client/src/main/java/net/sopod/soim/client/{ => cmd}/handler/CmdHandler.java (78%)
rename im-client/src/main/java/net/sopod/soim/client/{ => cmd}/handler/NonArgsHandler.java (80%)
create mode 100644 im-client/src/main/java/net/sopod/soim/client/config/ClientConfig.java
create mode 100644 im-client/src/main/java/net/sopod/soim/client/model/dto/LoginResDTO.java
create mode 100644 im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java
create mode 100644 im-client/src/main/java/net/sopod/soim/client/util/HttpClient.java
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