001package gu.dtalk.client; 002 003import com.google.common.base.Predicates; 004import com.google.common.base.Strings; 005 006import gu.dtalk.ConnectReq; 007import gu.dtalk.exception.DtalkException; 008import gu.dtalk.redis.DefaultCustomRedisConfigProvider; 009import gu.dtalk.redis.RedisConfigType; 010import gu.simplemq.Channel; 011import gu.simplemq.redis.JedisPoolLazy; 012import net.gdface.utils.BinaryUtils; 013 014import static gu.dtalk.client.SampleConsoleConfig.*; 015 016/** 017 * 简单字符终端实现 018 * @author guyadong 019 * 020 */ 021public class SampleConsole extends BaseConsole { 022 023 public SampleConsole(String devmac, RedisConfigType config) { 024 super(devmac, config); 025 } 026 /** 027 * 使用密码验证连接合法性<br> 028 * 向dtalk引擎发送包含连接密码和本机mac地址的json连接请求字符串({@link ConnectReq}), 029 * 收到回复的请求通道名,即连接成功 030 * @see gu.dtalk.client.BaseConsole#authorize() 031 */ 032 @Override 033 protected boolean authorize() { 034 System.out.println("Input password of Device,default password is last 4 character of device MAC address(lowercase):"); 035 ConnectReq req = new ConnectReq(); 036 req.mac = BinaryUtils.toHex(temminalMac); 037 Channel<ConnectReq> conch = new Channel<>(connchname, ConnectReq.class); 038 String pwd = null; 039 while ((reqChannel == null) && !(pwd=scanLine(Predicates.<String>alwaysTrue())).isEmpty()) { 040 req.pwd = BinaryUtils.getMD5String(pwd.getBytes()); 041 syncPublish(conch,req); 042 } 043 if(reqChannel != null){ 044 System.out.println("PASSWORD validate passed"); 045 return true; 046 } 047 return false; 048 } 049 050 public static void main(String []args){ 051 CONSOLE_CONFIG.parseCommandLine(args); 052 DefaultCustomRedisConfigProvider.initredisParameters(CONSOLE_CONFIG.getRedisParameters()); 053 System.out.println("Text terminal for Device Talk is starting(设备交互字符终端启动)"); 054 String devmac = CONSOLE_CONFIG.getMac(); 055 // 否则提示输入命令行参数 056 if(Strings.isNullOrEmpty(devmac)){ 057 devmac = inputMac(); 058 } 059 RedisConfigType config; 060 try { 061 config = RedisConfigType.lookupRedisConnect(); 062 } catch (DtalkException e) { 063 System.out.println(e.getMessage()); 064 return; 065 } 066 logger.info("use config={}",config.toString()); 067 // 创建redis连接实例 068 JedisPoolLazy.createDefaultInstance( config.readRedisParam() ); 069 070 SampleConsole client = new SampleConsole(devmac, config); 071 client.setStackTrace(CONSOLE_CONFIG.isTrace()).start(); 072 073 } 074 075}