package main import ( "context" "errors" "fmt" "github.com/google/uuid" "hnyfkj.com.cn/rtu/linux/baseapp" ) const MODULE_NAME = "YFKJ_SSH_CLIENT" var ( coupler *MQTTCoupler Version = "1.0.0.1" ErrBrokerAddressEmpty = errors.New("mqtt server address is empty") ErrIMEINotAvailable = errors.New("device imei is not available") ) func main() { if baseapp.IsArgsParam("-h") { help() return } if baseapp.IsArgsParam("-v") { fmt.Println("程序版本:", Version, "\n构建时间:", baseapp.BuildTime) return } devIMEI := baseapp.GetArgsParamStr("-c", "") if devIMEI == "" { help() return } if err := loadAppConfig(); err != nil { fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, err) return } if CfgServers.MQTTSrv.Address == "" { fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, ErrBrokerAddressEmpty) return } ctx, cancel := context.WithCancel(context.Background()) coupler = &MQTTCoupler{ ctx: ctx, cancel: cancel, broker: CfgServers.MQTTSrv.Address, username: CfgServers.MQTTSrv.Username, password: CfgServers.MQTTSrv.Password, clientID: uuid.New().String(), imei: devIMEI, cwd: "/", } if err := coupler.init2(); err != nil { fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, err) return } term() // 启动终端模拟器卍 } // SHELL终端模拟器 // 1, 连接远程设备, 是否成功 // 2, 等待用户输入, 封装请求 // 3, 没有用户输入, 封装心跳 // 4, 发送请求数据, 远程执行 // 5, 耗时用户请求, 允许中断, Ctrl+C // 6, 等待返回结果, 打印输出 // 7, 循环等待下次, 直到退出 func term() { for { } } func help() { h := ` -h 显示帮助提示 -v 当前程序版本 -c 连接目标设备(IMEI), 例如: -c 869523059113051 ` fmt.Println(h) }