Browse Source

整体优化修改代码

niujiuru 3 tuần trước cách đây
mục cha
commit
6e095c813f
9 tập tin đã thay đổi với 187 bổ sung12 xóa
  1. 21 7
      Makefile
  2. 1 1
      baseapp/app.go
  3. 0 0
      sshd/Makefile
  4. 2 0
      sshd/client/client.go
  5. 84 0
      sshd/client/config.go
  6. 3 3
      sshd/client/config.ini
  7. 7 0
      sshd/server/config.ini
  8. 68 0
      sshd/server/server.go
  9. 1 1
      sshd/sshd.go

+ 21 - 7
Makefile

@@ -29,7 +29,7 @@ SETGO_ENV = \
 DATE := $(shell date +%Y%m%d_%H%M%S)
 
 # 编译的目标
-all : camera_test.out hk_takephoto.out dh_takephoto.out air720u_4g.out rtu_linux_modules.out
+all : camera_test.out hk_takephoto.out dh_takephoto.out air720u_4g.out rtu_linux_modules.out yfkj_sshd.out yfkj_sshd_cli.out
 
 # 通用基础库
 libswapi.a :
@@ -41,7 +41,11 @@ libhk_takephoto.a :
 
 # "iRAYPLE"
 libdh_takephoto.a :
+ifeq ($(target),armv7hf)
 	$(MAKE) -C dh_takephoto target=$(target) $@
+else
+	$(error Unsupported target: $(target), only armv7hf is supported)
+endif
 
 # "Air720U"
 libair720u.a :
@@ -96,8 +100,6 @@ LIB4 := -Wl,-Bstatic -L./swapi -lswapi -L./dh_takephoto -ldh_takephoto
 ifeq ($(target),armv7hf)
   LIB4 += -Wl,-Bdynamic -lc -lm -ldl -lpthread -L$(PWD)/dh_takephoto/lib/armv7hf -lMVSDK -liImageProcessing -lImageConvert -llog4cpp -lMvLSCProcess
 	LIB4 += -L$(PWD)/dh_takephoto/lib/armv7hf/GenICam/bin -lGCBase_gcc483_v3_0 -lGenApi_gcc483_v3_0 -lLog_gcc483_v3_0 -llog4cpp_gcc483_v3_0 -lMathParser_gcc483_v3_0 -lNodeMapData_gcc483_v3_0 -lXmlParser_gcc483_v3_0
-else
-  $(error Unsupported target: $(target), only armv7hf is supported)
 endif
 dh_takephoto.out : libswapi.a libdh_takephoto.a ./tests/dh_takephoto/main.go
 	mkdir -p ./build/dh_takephoto_test
@@ -112,8 +114,6 @@ ifeq ($(target),armv7hf)
   LIB5 += -Wl,-Bdynamic -lc -lm -ldl -lpthread -L$(PWD)/hk_takephoto/lib/armv7hf/. -lMvCameraControl
 	LIB5 += -L$(PWD)/dh_takephoto/lib/armv7hf -lMVSDK -liImageProcessing -lImageConvert -llog4cpp -lMvLSCProcess
 	LIB5 += -L$(PWD)/dh_takephoto/lib/armv7hf/GenICam/bin -lGCBase_gcc483_v3_0 -lGenApi_gcc483_v3_0 -lLog_gcc483_v3_0 -llog4cpp_gcc483_v3_0 -lMathParser_gcc483_v3_0 -lNodeMapData_gcc483_v3_0 -lXmlParser_gcc483_v3_0
-else
-  $(error Unsupported target: $(target), only armv7hf is supported)
 endif
 camera_test.out : libswapi.a libhk_takephoto.a libdh_takephoto.a ./tests/camera/main.go
 	mkdir -p ./build/camera_test
@@ -122,8 +122,22 @@ camera_test.out : libswapi.a libhk_takephoto.a libdh_takephoto.a ./tests/camera/
 	@cp $@ ./build/camera_test/$(basename $@)_$(DATE)$(suffix $@)
 	rm -rf $@
 
+# 远程运维工具程序
+LIB6 = -Wl,-Bstatic -L./swapi -lswapi -L./air530z -lair530z -Wl,-Bdynamic -lc -lm -ldl -lpthread
+yfkj_sshd.out     : libswapi.a libair530z.a ./sshd/server/server.go
+	mkdir -p ./build
+	$(GO) mod tidy
+	$(SETGO_ENV) CGO_LDFLAGS="$(LIB6)" $(GO_BUILD) $(GO_FLAGS) -o $@ ./sshd/server/server.go
+	@cp $@ ./build/$(basename $@)_$(DATE)$(suffix $@)
+
+yfkj_sshd_cli.out : libswapi.a libair530z.a ./sshd/client/client.go
+	mkdir -p ./build
+	$(GO) mod tidy
+	$(SETGO_ENV) CGO_LDFLAGS="$(LIB6)" $(GO_BUILD) $(GO_FLAGS) -o $@ ./sshd/client/client.go
+	@cp $@ ./build/$(basename $@)_$(DATE)$(suffix $@)
+
 # 综合应用测试程序
-LIBS := -Wl,-Bstatic -L./swapi -lswapi -L./hk_takephoto -lhk_takephoto -L./air720u -lair720u -L./air530z -lair530z -L./ec200u -lec200u -L./dh_takephoto -ldh_takephoto
+LIBS := -Wl,-Bstatic -L./swapi -lswapi -L./hk_takephoto -lhk_takephoto -L./dh_takephoto -ldh_takephoto -L./air720u -lair720u -L./air530z -lair530z -L./ec200u -lec200u
 ifeq ($(target),armv7hf)
   LIBS += -Wl,-Bdynamic -lc -lm -ldl -lpthread -L$(PWD)/hk_takephoto/lib/armv7hf/. -lMvCameraControl
 	LIBS += -L$(PWD)/dh_takephoto/lib/armv7hf -lMVSDK -liImageProcessing -lImageConvert -llog4cpp -lMvLSCProcess
@@ -131,7 +145,7 @@ ifeq ($(target),armv7hf)
 else
   LIBS += -Wl,-Bdynamic -lc -lm -ldl -lpthread -L$(PWD)/hk_takephoto/lib/x86_64/64 -lMvCameraControl
 endif
-rtu_linux_modules.out : libswapi.a libhk_takephoto.a libair720u.a libair530z.a libec200u.a ./main.go
+rtu_linux_modules.out : libswapi.a libhk_takephoto.a libdh_takephoto.a libair720u.a libair530z.a libec200u.a ./main.go
 	mkdir -p ./build
 	$(GO) mod tidy
 	$(SETGO_ENV) CGO_LDFLAGS="$(LIBS)" $(GO_BUILD) $(GO_FLAGS) -o $@ ./main.go

+ 1 - 1
baseapp/app.go

@@ -24,7 +24,7 @@ func ModuleInit() {
 	InitLogger()
 }
 
-func SingleInstanceRun() { // 非阻塞单实例运行
+func SingleInstanceRun() { // 非阻塞单实例运行, 调用此函数后, 安全退出时, 需调用SafeExit()函数
 	lockFile := filepath.Join(RUN_DIR, EXEC_FILENAME+".lock")
 	mux, err := filemutex.New(lockFile)
 	if err != nil {

+ 0 - 0
sshd/Makefile


+ 2 - 0
sshd/client/client.go

@@ -1,4 +1,6 @@
 package main
 
+const MODULE_NAME = "YFKJ_SSHD_CTL"
+
 func main() {
 }

+ 84 - 0
sshd/client/config.go

@@ -1 +1,85 @@
 package main
+
+import (
+	"fmt"
+	"path/filepath"
+
+	"gopkg.in/ini.v1"
+	"hnyfkj.com.cn/rtu/linux/baseapp"
+)
+
+type MQTTBroker struct {
+	Address  string `ini:"BrokerAddress"` // 地址端口
+	Username string `ini:"Username"`      // 用户名称
+	Password string `ini:"Password"`      // 接入密码
+}
+
+type CmdTimeout struct {
+	Prefix  string `ini:"Prefix"`  ///////// 命令前缀
+	Timeout int    `ini:"Timeout"` /// 超时, 单位: 秒
+}
+
+type Config struct {
+	MQTTSrv MQTTBroker            `ini:"MQTTSrv"`
+	Cmds    map[string]CmdTimeout /// key = ini的节名
+}
+
+var (
+	CfgServers = &Config{}
+)
+
+func init() {
+	if err := loadAppConfig(); err != nil {
+		baseapp.Logger.Panicf("[%s] 加载配置文件失败: %v!!", MODULE_NAME, err)
+	}
+}
+
+func loadAppConfig() error {
+	cfgFile := filepath.Join(baseapp.CFG_DIR, "config.ini")
+	cfgIni, err := ini.Load(cfgFile)
+	if err != nil {
+		return err
+	}
+
+	if cfgIni.HasSection("MQTTSrv") {
+		if err := cfgIni.Section("MQTTSrv").MapTo(&CfgServers.MQTTSrv); err != nil {
+			return err
+		}
+	} else {
+		return fmt.Errorf("配置文件\"%s\"缺少\"[MQTTSrv]\"节", cfgFile)
+	}
+
+	CfgServers.Cmds = make(map[string]CmdTimeout)
+
+	for _, sec := range cfgIni.Sections() {
+		secName := sec.Name()
+
+		if secName == ini.DefaultSection || secName == "MQTTSrv" {
+			continue
+		}
+
+		var cmd CmdTimeout
+		if err := sec.MapTo(&cmd); err != nil || cmd.Prefix == "" || cmd.Timeout <= 0 {
+			continue
+		}
+
+		CfgServers.Cmds[secName] = cmd
+	}
+
+	return nil
+}
+
+func getCmdTimeoutByPrefix(cmd string) int {
+	if cmd == "" || len(CfgServers.Cmds) == 0 {
+		return -1
+	}
+
+	for _, c := range CfgServers.Cmds {
+		if c.Prefix != "" && len(cmd) >= len(c.Prefix) &&
+			cmd[:len(c.Prefix)] == c.Prefix {
+			return c.Timeout
+		}
+	}
+
+	return -1
+}

+ 3 - 3
sshd/client/config.ini

@@ -1,6 +1,6 @@
 [MQTTSrv]
 ; 地址端口
-BrokerAddress = tcp://www.hnyfwlw.com:61883
+BrokerAddress = tcp://mqtt.hnyfwlw.com:61883
 ; 用户名称
 Username = user
 ; 接入密码
@@ -9,6 +9,6 @@ Password = f335bf402c655ee5fd2b5300905124e
 ; 耗时命令, 命令超时的时间单位为秒
 ; 有其它耗时命令时,可仿照扩展追加
 ; 节名任意, 但包含的字段内容必须是: "Prefix"和"Timeout"
-[ftp_trans_file]
-Prefix  = ./ftp_trans_file
+[curl]
+Prefix  = curl
 Timeout = 600

+ 7 - 0
sshd/server/config.ini

@@ -0,0 +1,7 @@
+[MQTTSrv]
+; 地址端口
+BrokerAddress = tcp://mqtt.hnyfwlw.com:61883
+; 用户名称
+Username = user
+; 接入密码
+Password = f335bf402c655ee5fd2b5300905124e

+ 68 - 0
sshd/server/server.go

@@ -0,0 +1,68 @@
+package main
+
+import (
+	"fmt"
+	"path/filepath"
+
+	"gopkg.in/ini.v1"
+	"hnyfkj.com.cn/rtu/linux/baseapp"
+	"hnyfkj.com.cn/rtu/linux/sshd"
+)
+
+const MODULE_NAME = sshd.MODULE_NAME
+
+type MQTTBroker struct {
+	Address  string `ini:"BrokerAddress"` // 地址端口
+	Username string `ini:"Username"`      // 用户名称
+	Password string `ini:"Password"`      // 接入密码
+}
+
+type Config struct {
+	MQTTSrv MQTTBroker `ini:"MQTTSrv"`
+}
+
+var (
+	CfgServers = &Config{}
+	Version    = "1.0.0.1"
+)
+
+func loadCfgServers() error {
+	cfgFile := filepath.Join(baseapp.CFG_DIR, "config.ini")
+	cfgIni, err := ini.Load(cfgFile)
+	if err != nil {
+		return err
+	}
+
+	if cfgIni.HasSection("MQTTSrv") {
+		if err := cfgIni.Section("MQTTSrv").MapTo(&CfgServers.MQTTSrv); err != nil {
+			return err
+		}
+	} else {
+		return fmt.Errorf("配置文件\"%s\"缺少\"[MQTTSrv]\"节", cfgFile)
+	}
+
+	return nil
+}
+
+func main() {
+	baseapp.ModuleInit()
+	baseapp.SingleInstanceRun() // 异步非阻塞
+	baseapp.Logger.Infof("程序版本: %s 构建时间: %s\n程序开始运行...",
+		Version, baseapp.BuildTime)
+
+	if err := loadCfgServers(); err != nil {
+		baseapp.Logger.Errorf("[%s] 加载服务器配置项失败: %v!!", MODULE_NAME, err)
+		return
+	}
+
+	success := sshd.ModuleInit(CfgServers.MQTTSrv.Address, CfgServers.MQTTSrv.Username, CfgServers.MQTTSrv.Password)
+	if !success {
+		return
+	}
+
+	<-baseapp.IsExit2()
+
+	baseapp.Logger.Info("程序退出")
+	baseapp.ExitLogger() // 安全的关闭日志模块
+	baseapp.SafeExit()   // 安全的关闭退出程序
+}

+ 1 - 1
sshd/sshd.go

@@ -15,7 +15,7 @@ import (
 	"hnyfkj.com.cn/rtu/linux/utils/singletask"
 )
 
-const MODULE_NAME = "SshdOverMqtt"
+const MODULE_NAME = "YFKJ_SSHD"
 
 var (
 	Coupler *MQTTCoupler