Browse Source

im-client command

master
tangmingyou 4 years ago
parent
commit
dd5a81459e
  1. 9
      im-client/pom.xml
  2. 18
      im-client/src/main/java/net/sopod/soim/client/ClientMain.java
  3. 21
      im-client/src/main/java/net/sopod/soim/client/cmd/ArgsLogin.java
  4. 52
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java
  5. 31
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java
  6. 38
      im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java
  7. 43
      im-client/src/main/java/net/sopod/soim/client/config/GuiceIoc.java
  8. 15
      im-client/src/main/java/net/sopod/soim/client/handler/CmdHandler.java
  9. 19
      im-client/src/main/java/net/sopod/soim/client/handler/ExitHandler.java
  10. 25
      im-client/src/main/java/net/sopod/soim/client/handler/LoginCmdHandler.java
  11. 23
      im-client/src/main/java/net/sopod/soim/client/handler/NonArgsHandler.java
  12. 23
      im-client/src/main/java/net/sopod/soim/client/logger/Logger.java
  13. 4
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java
  14. 10
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java
  15. 1
      im-service/im-router/src/main/java/net/sopod/soim/router/service/CaffeineTest.java
  16. 6
      pom.xml

9
im-client/pom.xml

@ -25,10 +25,17 @@
<groupId>io.netty</groupId> <groupId>io.netty</groupId>
<artifactId>netty-all</artifactId> <artifactId>netty-all</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.beust</groupId> <groupId>com.beust</groupId>
<artifactId>jcommander</artifactId> <artifactId>jcommander</artifactId>
<version>1.82</version>
</dependency> </dependency>
</dependencies> </dependencies>

18
im-client/src/main/java/net/sopod/soim/client/ClientMain.java

@ -1,5 +1,11 @@
package net.sopod.soim.client; 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; import net.sopod.soim.client.net.ImNetClient;
/** /**
@ -14,9 +20,15 @@ import net.sopod.soim.client.net.ImNetClient;
public class ClientMain { public class ClientMain {
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
ImNetClient client = new ImNetClient(); // ImNetClient client = new ImNetClient();
client.connect("127.0.0.1", 8088); // 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();
} }
} }

21
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;
}

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

31
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() {
}
}

38
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() {
}
}

43
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<Class<?>> 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);
}
}

15
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> {
T newArgsInstance();
void handleArgs(T args);
}

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

25
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<ArgsLogin> {
@Override
public ArgsLogin newArgsInstance() {
return new ArgsLogin();
}
@Override
public void handleArgs(ArgsLogin args) {
}
}

23
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<Object> {
@Override
public final Object newArgsInstance() {
return new Object();
}
@Override
public final void handleArgs(Object args) {
this.handle();
}
abstract void handle();
}

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

4
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 boolean success;
private Long uid;
private String authToken; private String authToken;
private long expireMs; private Long expireMs;
private String message; private String message;

10
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; package net.sopod.soim.logic.user.service;
import net.sopod.soim.common.util.ImClock; 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.common.util.TokenUtil;
import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.UserDasService; import net.sopod.soim.das.user.api.service.UserDasService;
@ -34,17 +33,22 @@ public class UserAuthServiceImpl implements UserAuthService {
@Override @Override
public ImAuth pwdAuth(String account, String password) { public ImAuth pwdAuth(String account, String password) {
ImUser imUser = userDasService.getNormalUserByAccount(account); ImUser imUser = userDasService.getNormalUserByAccount(account);
ImAuth imAuth = new ImAuth()
.setSuccess(false)
.setExpireMs(-1L)
.setUid(-1L);
if (imUser == null) { if (imUser == null) {
return new ImAuth().setSuccess(false).setMessage("账号不存在"); return imAuth.setMessage("账号不存在");
} }
if (StringUtils.isEmpty(imUser.getPassword()) if (StringUtils.isEmpty(imUser.getPassword())
|| !Objects.equals(imUser.getPassword(), password)) { || !Objects.equals(imUser.getPassword(), password)) {
return new ImAuth().setSuccess(false).setMessage("密码有误"); return imAuth.setMessage("密码有误");
} }
String token = TokenUtil.genToken(imUser.getId()); String token = TokenUtil.genToken(imUser.getId());
return new ImAuth() return new ImAuth()
.setSuccess(true) .setSuccess(true)
.setAuthToken(token) .setAuthToken(token)
.setUid(imUser.getId())
.setExpireMs(ImClock.millis() .setExpireMs(ImClock.millis()
+ TimeUnit.SECONDS.toMillis(authConfig.getAuthTokenExpire())); + TimeUnit.SECONDS.toMillis(authConfig.getAuthTokenExpire()));
} }

1
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 com.google.common.collect.*;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**

6
pom.xml

@ -229,6 +229,12 @@
<version>${nacos.version}</version> <version>${nacos.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.82</version>
</dependency>
<!-- 消息队列 --> <!-- 消息队列 -->
<!--1、amqp高级消息队列的依赖--> <!--1、amqp高级消息队列的依赖-->
<dependency> <dependency>

Loading…
Cancel
Save