config.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package main
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "gopkg.in/ini.v1"
  6. "hnyfkj.com.cn/rtu/linux/baseapp"
  7. )
  8. type MQTTBroker struct {
  9. Address string `ini:"BrokerAddress"` // 地址端口
  10. Username string `ini:"Username"` // 用户名称
  11. Password string `ini:"Password"` // 接入密码
  12. }
  13. type CmdTimeout struct {
  14. Prefix string `ini:"Prefix"` ///////// 命令前缀
  15. Timeout int `ini:"Timeout"` /// 超时, 单位: 秒
  16. }
  17. type Config struct {
  18. MQTTSrv MQTTBroker `ini:"MQTTSrv"`
  19. Cmds map[string]CmdTimeout /// key = ini的节名
  20. }
  21. var (
  22. CfgServers = &Config{}
  23. )
  24. func loadAppConfig() error {
  25. cfgFile := filepath.Join(baseapp.CFG_DIR, "config.ini")
  26. cfgIni, err := ini.Load(cfgFile)
  27. if err != nil {
  28. return err
  29. }
  30. if cfgIni.HasSection("MQTTSrv") {
  31. if err := cfgIni.Section("MQTTSrv").MapTo(&CfgServers.MQTTSrv); err != nil {
  32. return err
  33. }
  34. } else {
  35. return fmt.Errorf("配置文件\"%s\"缺少\"[MQTTSrv]\"节", cfgFile)
  36. }
  37. CfgServers.Cmds = make(map[string]CmdTimeout)
  38. for _, sec := range cfgIni.Sections() {
  39. secName := sec.Name()
  40. if secName == ini.DefaultSection || secName == "MQTTSrv" {
  41. continue
  42. }
  43. var cmd CmdTimeout
  44. if err := sec.MapTo(&cmd); err != nil || cmd.Prefix == "" || cmd.Timeout <= 0 {
  45. continue
  46. }
  47. CfgServers.Cmds[secName] = cmd
  48. }
  49. return nil
  50. }
  51. func getCmdTimeoutByPrefix(cmd string) int {
  52. if cmd == "" || len(CfgServers.Cmds) == 0 {
  53. return -1
  54. }
  55. for _, c := range CfgServers.Cmds {
  56. if c.Prefix != "" && len(cmd) >= len(c.Prefix) &&
  57. cmd[:len(c.Prefix)] == c.Prefix {
  58. return c.Timeout
  59. }
  60. }
  61. return -1
  62. }