config.go 1.5 KB

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