client.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package main
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/google/uuid"
  7. "hnyfkj.com.cn/rtu/linux/baseapp"
  8. )
  9. const MODULE_NAME = "YFKJ_SSH_CLIENT"
  10. var (
  11. coupler *MQTTCoupler
  12. Version = "1.0.0.1"
  13. ErrBrokerAddressEmpty = errors.New("mqtt server address is empty")
  14. ErrIMEINotAvailable = errors.New("device imei is not available")
  15. )
  16. func main() {
  17. if baseapp.IsArgsParam("-h") {
  18. help()
  19. return
  20. }
  21. if baseapp.IsArgsParam("-v") {
  22. fmt.Println("程序版本:", Version, "\n构建时间:", baseapp.BuildTime)
  23. return
  24. }
  25. devIMEI := baseapp.GetArgsParamStr("-c", "")
  26. if devIMEI == "" {
  27. help()
  28. return
  29. }
  30. if err := loadAppConfig(); err != nil {
  31. fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, err)
  32. return
  33. }
  34. if CfgServers.MQTTSrv.Address == "" {
  35. fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, ErrBrokerAddressEmpty)
  36. return
  37. }
  38. ctx, cancel := context.WithCancel(context.Background())
  39. coupler = &MQTTCoupler{
  40. ctx: ctx,
  41. cancel: cancel,
  42. broker: CfgServers.MQTTSrv.Address,
  43. username: CfgServers.MQTTSrv.Username,
  44. password: CfgServers.MQTTSrv.Password,
  45. clientID: uuid.New().String(),
  46. imei: devIMEI,
  47. cwd: "/",
  48. }
  49. if err := coupler.init2(); err != nil {
  50. fmt.Printf("[%s] 错误: %v!!", MODULE_NAME, err)
  51. return
  52. }
  53. term() // 启动终端模拟器卍
  54. }
  55. // SHELL终端模拟器
  56. // 1, 连接远程设备, 是否成功
  57. // 2, 等待用户输入, 封装请求
  58. // 3, 没有用户输入, 封装心跳
  59. // 4, 发送请求数据, 远程执行
  60. // 5, 耗时用户请求, 允许中断, Ctrl+C
  61. // 6, 等待返回结果, 打印输出
  62. // 7, 循环等待下次, 直到退出
  63. func term() {
  64. for {
  65. }
  66. }
  67. func help() {
  68. h := `
  69. -h 显示帮助提示
  70. -v 当前程序版本
  71. -c 连接目标设备(IMEI), 例如: -c 869523059113051
  72. `
  73. fmt.Println(h)
  74. }