|
|
@@ -5,12 +5,14 @@ import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"strings"
|
|
|
+ "sync"
|
|
|
"sync/atomic"
|
|
|
"time"
|
|
|
|
|
|
mqtt "github.com/eclipse/paho.mqtt.golang"
|
|
|
"github.com/google/uuid"
|
|
|
"hnyfkj.com.cn/rtu/linux/baseapp"
|
|
|
+ "hnyfkj.com.cn/rtu/linux/utils/shell"
|
|
|
)
|
|
|
|
|
|
const MODULE_NAME = "YFKJ_SSH_CLIENT"
|
|
|
@@ -33,19 +35,20 @@ var (
|
|
|
)
|
|
|
|
|
|
type MQTTCoupler struct {
|
|
|
- broker, username, password string
|
|
|
- client mqtt.Client
|
|
|
- clientID string
|
|
|
-
|
|
|
- imei string // 设备唯一标识
|
|
|
- subTopic string // 订阅应答主题:/yfkj/device/rpc/imei/ack
|
|
|
- pubTopic string // 发布指令主题:/yfkj/device/rpc/imei/cmd
|
|
|
- cwd string // 当前工作目录
|
|
|
-
|
|
|
ctx context.Context
|
|
|
cancel context.CancelFunc
|
|
|
|
|
|
- isConnected atomic.Bool /// 标记是否已连接MQTT的Broker服务
|
|
|
+ broker, username, password string
|
|
|
+
|
|
|
+ client mqtt.Client
|
|
|
+ clientID string
|
|
|
+ isConnected atomic.Bool /////// 标记是否已连接MQTT的Broker服务
|
|
|
+
|
|
|
+ imei string // 设备唯一标识
|
|
|
+ subTopic string // 订阅应答主题:/yfkj/device/rpc/imei/ack
|
|
|
+ pubTopic string // 发布指令主题:/yfkj/device/rpc/imei/cmd
|
|
|
+ cwd string // 当前工作目录
|
|
|
+ mu sync.Mutex // 串行执行的锁
|
|
|
}
|
|
|
|
|
|
func init() {
|
|
|
@@ -57,14 +60,13 @@ func init() {
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
|
|
coupler = &MQTTCoupler{
|
|
|
- broker: CfgServers.MQTTSrv.Address,
|
|
|
- username: CfgServers.MQTTSrv.Username,
|
|
|
- password: CfgServers.MQTTSrv.Password,
|
|
|
- clientID: uuid.New().String(),
|
|
|
- cwd: "/",
|
|
|
- ctx: ctx,
|
|
|
- cancel: cancel,
|
|
|
- isConnected: atomic.Bool{},
|
|
|
+ ctx: ctx,
|
|
|
+ cancel: cancel,
|
|
|
+ broker: CfgServers.MQTTSrv.Address,
|
|
|
+ username: CfgServers.MQTTSrv.Username,
|
|
|
+ password: CfgServers.MQTTSrv.Password,
|
|
|
+ clientID: uuid.New().String(),
|
|
|
+ cwd: "/",
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -175,3 +177,10 @@ func (c *MQTTCoupler) connect() error {
|
|
|
|
|
|
return token.Error()
|
|
|
}
|
|
|
+
|
|
|
+func (c *MQTTCoupler) ExecuteShell(cmd string) shell.ExecuteResult {
|
|
|
+ c.mu.Lock()
|
|
|
+ defer c.mu.Unlock()
|
|
|
+
|
|
|
+ return shell.ExecuteResult{}
|
|
|
+}
|