From dd5a81459efc8d3eb690d53ccc6fbe313b090cb8 Mon Sep 17 00:00:00 2001 From: tangmingyou <234767776@qq.com> Date: Mon, 25 Apr 2022 17:47:21 +0800 Subject: [PATCH] im-client command --- im-client/pom.xml | 9 +++- .../net/sopod/soim/client/ClientMain.java | 18 +++++-- .../net/sopod/soim/client/cmd/ArgsLogin.java | 21 ++++++++ .../sopod/soim/client/cmd/CmdDispatcher.java | 52 +++++++++++++++++++ .../net/sopod/soim/client/cmd/CmdEnum.java | 31 +++++++++++ .../net/sopod/soim/client/cmd/CmdStarter.java | 38 ++++++++++++++ .../sopod/soim/client/config/GuiceIoc.java | 43 +++++++++++++++ .../sopod/soim/client/handler/CmdHandler.java | 15 ++++++ .../soim/client/handler/ExitHandler.java | 19 +++++++ .../soim/client/handler/LoginCmdHandler.java | 25 +++++++++ .../soim/client/handler/NonArgsHandler.java | 23 ++++++++ .../net/sopod/soim/client/logger/Logger.java | 23 ++++++++ .../soim/logic/user/auth/model/ImAuth.java | 4 +- .../user/service/UserAuthServiceImpl.java | 10 ++-- .../soim/router/service/CaffeineTest.java | 1 - pom.xml | 6 +++ 16 files changed, 329 insertions(+), 9 deletions(-) create mode 100644 im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/handler/CmdHandler.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/handler/LoginCmdHandler.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/handler/NonArgsHandler.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/logger/Logger.java diff --git a/im-client/pom.xml b/im-client/pom.xml index d3949d0..8e3d245 100644 --- a/im-client/pom.xml +++ b/im-client/pom.xml @@ -25,10 +25,17 @@ io.netty netty-all + + com.google.inject + guice + + + org.reflections + reflections + com.beust jcommander - 1.82 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 27e5eef..0e3bc30 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 @@ -1,5 +1,11 @@ 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; /** @@ -14,9 +20,15 @@ import net.sopod.soim.client.net.ImNetClient; public class ClientMain { public static void main(String[] args) throws InterruptedException { - ImNetClient client = new ImNetClient(); - client.connect("127.0.0.1", 8088); - +// ImNetClient client = new ImNetClient(); +// client.connect("127.0.0.1", 8088); + 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); + 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 new file mode 100644 index 0000000..2adf415 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java @@ -0,0 +1,21 @@ +package net.sopod.soim.client.cmd; + +import com.beust.jcommander.Parameter; +import lombok.Data; + +/** + * ArgsLogin + * + * @author tmy + * @date 2022-04-25 10:42 + */ +@Data +public class ArgsLogin { + + @Parameter(names = {"-u", "-account"}, description = "账号") + private String account; + + @Parameter(names = {"-p", "-password"}, 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 new file mode 100644 index 0000000..94ea555 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java @@ -0,0 +1,52 @@ +package net.sopod.soim.client.cmd; + +import com.beust.jcommander.JCommander; +import com.google.inject.Injector; +import net.sopod.soim.client.logger.Logger; + +/** + * CommandDispatcher + * + * auth -u prometheus -p 123456 + * send zeus hello + * send prometheus hi! + * users + * groups + * + * + * @author tmy + * @date 2022-04-25 10:28 + */ +public class CmdDispatcher { + + private final Injector injector; + + public CmdDispatcher(Injector injector) { + this.injector = injector; + } + + 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); + + } + + public static void main(String[] args) { + String cmdStr = "auth -u prometheus -p 123456"; + int idx = cmdStr.indexOf(" "); + String cmd = idx == -1 ? cmdStr : cmdStr.substring(0, idx); + String argsStr = idx == -1 ? "" : cmdStr.substring(idx + 1); + + + ArgsLogin argsLogin = new ArgsLogin(); + String[] argv = {"-u", "zeus", "-p", "123456"}; + JCommander.newBuilder() + .addObject(argsLogin) + .build() + .parse(argv); + System.out.println(argsLogin); + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java new file mode 100644 index 0000000..a32f30a --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java @@ -0,0 +1,31 @@ +package net.sopod.soim.client.cmd; + +/** + * Commands + * + * @author tmy + * @date 2022-04-25 10:51 + */ +public enum CmdEnum { + + /** 登录 */ + login, + + /** 发送消息 */ + send, + + /** 用户列表 */ + users, + + /** 用户分组列表 */ + groups, + + /** 退出 */ + exit; + + + CmdEnum() { + + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java new file mode 100644 index 0000000..0c85d77 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java @@ -0,0 +1,38 @@ +package net.sopod.soim.client.cmd; + +import com.google.inject.Injector; +import net.sopod.soim.client.logger.Logger; + +import java.util.Scanner; + +/** + * Args + * + * @author tmy + * @date 2022-04-25 10:28 + */ +public class CmdStarter { + + private final CmdDispatcher cmdDispatcher; + + public CmdStarter(CmdDispatcher cmdDispatcher) { + this.cmdDispatcher = cmdDispatcher; + } + + public void start() { + Scanner scanner = new Scanner(System.in); + Logger.pre("[client]: "); + while(scanner.hasNextLine()) { + String cmd = scanner.nextLine(); + cmdDispatcher.dispatchCmd(cmd); + Logger.pre("[client]: "); + } + + scanner.close(); + } + + public void exit() { + + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java b/im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java new file mode 100644 index 0000000..451d933 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java @@ -0,0 +1,43 @@ +package net.sopod.soim.client.config; + +import com.google.inject.AbstractModule; +import com.google.inject.Singleton; +import org.reflections.Reflections; + +import java.util.Collections; +import java.util.Set; + +/** + * Ioc + * + * @author tmy + * @date 2022-04-25 11:02 + */ +public class GuiceIoc extends AbstractModule { + + private final String rootPackage; + + private Set> beanTypes = Collections.emptySet(); + + public GuiceIoc(Class rootClass) { + this.rootPackage = rootClass.getPackage().getName(); + this.scanRootPackage(); + } + + @Override + protected void configure() { + for (Class beanType : this.beanTypes) { + bind(beanType); + } + this.beanTypes = Collections.emptySet(); + } + + /** + * 扫描需要注入的类 + */ + private void scanRootPackage() { + Reflections reflect = new Reflections(rootPackage); + this.beanTypes = reflect.getTypesAnnotatedWith(Singleton.class); + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/CmdHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/CmdHandler.java new file mode 100644 index 0000000..9df3859 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/CmdHandler.java @@ -0,0 +1,15 @@ +package net.sopod.soim.client.handler; + +/** + * CmdHandler + * + * @author tmy + * @date 2022-04-25 10:56 + */ +public interface CmdHandler { + + T newArgsInstance(); + + void handleArgs(T args); + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java new file mode 100644 index 0000000..b3e0425 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java @@ -0,0 +1,19 @@ +package net.sopod.soim.client.handler; + +import com.google.inject.Singleton; + +/** + * ExitHandler + * + * @author tmy + * @date 2022-04-25 11:53 + */ +@Singleton +public class ExitHandler extends NonArgsHandler { + + @Override + public void handle() { + System.exit(1); + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/LoginCmdHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/LoginCmdHandler.java new file mode 100644 index 0000000..e101a83 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/LoginCmdHandler.java @@ -0,0 +1,25 @@ +package net.sopod.soim.client.handler; + +import com.google.inject.Singleton; +import net.sopod.soim.client.cmd.ArgsLogin; + +/** + * LoginCmdHandler + * + * @author tmy + * @date 2022-04-25 10:53 + */ +@Singleton +public class LoginCmdHandler implements CmdHandler { + + @Override + public ArgsLogin newArgsInstance() { + return new ArgsLogin(); + } + + @Override + public void handleArgs(ArgsLogin args) { + + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/NonArgsHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/NonArgsHandler.java new file mode 100644 index 0000000..e9ced6a --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/NonArgsHandler.java @@ -0,0 +1,23 @@ +package net.sopod.soim.client.handler; + +/** + * NoArgsHandler + * + * @author tmy + * @date 2022-04-25 12:00 + */ +public abstract class NonArgsHandler implements CmdHandler { + + @Override + public final Object newArgsInstance() { + return new Object(); + } + + @Override + public final void handleArgs(Object args) { + this.handle(); + } + + abstract void handle(); + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/logger/Logger.java b/im-client/src/main/java/net/sopod/soim/client/logger/Logger.java new file mode 100644 index 0000000..125148c --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/logger/Logger.java @@ -0,0 +1,23 @@ +package net.sopod.soim.client.logger; + +/** + * Logger + * + * @author tmy + * @date 2022-04-25 11:44 + */ +public class Logger { + + public static void info(String msg, Object...args) { + msg = msg.replaceAll("\\{}", "%s"); + for (int i = 0; i < args.length; i++) { + args[i] = String.valueOf(args[i]); + } + System.out.println("[info]: " + String.format(msg, args)); + } + + public static void pre(String pre) { + System.out.print(pre); + } + +} diff --git a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java index 3f65158..ac101c9 100644 --- a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java +++ b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java @@ -19,9 +19,11 @@ public class ImAuth implements Serializable { private boolean success; + private Long uid; + private String authToken; - private long expireMs; + private Long expireMs; private String message; diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java index aa37414..568e65e 100644 --- a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java @@ -1,7 +1,6 @@ package net.sopod.soim.logic.user.service; import net.sopod.soim.common.util.ImClock; -import net.sopod.soim.common.util.StringUtil; import net.sopod.soim.common.util.TokenUtil; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.UserDasService; @@ -34,17 +33,22 @@ public class UserAuthServiceImpl implements UserAuthService { @Override public ImAuth pwdAuth(String account, String password) { ImUser imUser = userDasService.getNormalUserByAccount(account); + ImAuth imAuth = new ImAuth() + .setSuccess(false) + .setExpireMs(-1L) + .setUid(-1L); if (imUser == null) { - return new ImAuth().setSuccess(false).setMessage("账号不存在"); + return imAuth.setMessage("账号不存在"); } if (StringUtils.isEmpty(imUser.getPassword()) || !Objects.equals(imUser.getPassword(), password)) { - return new ImAuth().setSuccess(false).setMessage("密码有误"); + return imAuth.setMessage("密码有误"); } String token = TokenUtil.genToken(imUser.getId()); return new ImAuth() .setSuccess(true) .setAuthToken(token) + .setUid(imUser.getId()) .setExpireMs(ImClock.millis() + TimeUnit.SECONDS.toMillis(authConfig.getAuthTokenExpire())); } diff --git a/im-service/im-router/src/main/java/net/sopod/soim/router/service/CaffeineTest.java b/im-service/im-router/src/main/java/net/sopod/soim/router/service/CaffeineTest.java index 171458c..43a4c91 100644 --- a/im-service/im-router/src/main/java/net/sopod/soim/router/service/CaffeineTest.java +++ b/im-service/im-router/src/main/java/net/sopod/soim/router/service/CaffeineTest.java @@ -4,7 +4,6 @@ import com.github.benmanes.caffeine.cache.*; import com.google.common.collect.*; import org.checkerframework.checker.nullness.qual.Nullable; -import java.util.ArrayList; import java.util.concurrent.TimeUnit; /** diff --git a/pom.xml b/pom.xml index 53da096..1163ada 100644 --- a/pom.xml +++ b/pom.xml @@ -229,6 +229,12 @@ ${nacos.version} + + com.beust + jcommander + 1.82 + +