zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
system-service/main.go
@@ -1,283 +1,283 @@
package main
import (
   "context"
   "flag"
   "net/http"
   _ "net/http/pprof"
   "os"
   "os/signal"
   "syscall"
   "vamicro/config"
   "vamicro/extend/util"
   "vamicro/system-service/broadcast"
   "vamicro/system-service/controllers"
   "vamicro/system-service/models"
   "vamicro/system-service/serf"
   "vamicro/system-service/service"
   "vamicro/system-service/sys"
   versionControlS "vamicro/version-control/service"
   "basic.com/valib/bhomeclient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   vaversion "basic.com/valib/version.git"
)
var (
   procName = service.ProcName
   proc     = &bhomeclient.ProcInfo{
      Name: procName, //进程名称
      ID:   procName, //进程id
      Info: "",       //进程的描述信息,用于区分同一进程名称下多个进程
   }
   env = flag.String("e", "pro", "")
)
func init() {
   flag.Parse()
   vaversion.Usage()
   config.Init(*env)
   // 日志初始化
   var logFile = config.LogConf.Path + "vamicro-" + procName + ".log"
   logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge)
   logger.Info("log init success !")
}
func main() {
   // pprof 用于分析性能
   go func() {
      logger.Info(http.ListenAndServe("0.0.0.0:6078", nil))
   }()
   models.Init()
   defer models.CloseDB()
   models.GetDB().SetLogger(&serf.DbLogger{})
   fm, pubTopics := initFuncMap()
   ctx, cancel := context.WithCancel(context.Background())
   var reg = &bhomeclient.RegisterInfo{
      Proc:        *proc,
      Channel:     nil,
      PubTopic:    pubTopics,
      SubTopic:    []string{versionControlS.AuthorizationUpdateTopic},
      SubNetTopic: []string{},
   }
   q := make(chan os.Signal, 1)
   signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
   ms, err := bhomeclient.NewMicroNode(ctx, q, config.Server.AnalyServerId, reg, logger.Debug)
   if err != nil {
      return
   }
   bhomedbapi.InitGetNetNode(ms.GetLocalNetNodeByTopic)
   bhomedbapi.InitDoReq(ms.RequestOnly)
   bhomedbapi.InitLog(logger.Debug)
   util.AuthCheck(ctx) //授权检查
   go ms.StartServer(fm)
   go dealSubMsg(ctx, ms)
   serf.InitBusH(ms)
   serf.InitAgent(ctx)
   go service.WatchEsAndWeedfsIp(ms)
   go serf.StartSyncSqlToSerf()
   go service.StartSyncDev()
   go broadcast.StartServer() //设备可以被广播搜索
   //go service.CollectDeviceInfo(ctx, ms)
   go service.WatchAuthSetChange(ms) //根据授权文件监视通道数量变化
   //统计系统运行状态
   go sys.GatherStat()
   <-q
   ms.DeRegister()
   cancel()
   ms.Free()
}
const urlPrefix = "/data/api-v"
func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) {
   funcMap := make(map[string]bhomeclient.MicroFunc)
   ssController := new(controllers.SysSetController)
   clusterController := new(controllers.ClusterController)
   voiceC := new(controllers.VoiceController)
   dictionaryC := new(controllers.DictionaryController)
   icController := new(controllers.InfoController)
   licenseController := new(controllers.LicenseController)
   syncSWFSNodeController := new(controllers.SyncSWFSNodeController)
   syncEsNodeController := new(controllers.SyncEsNodeController)
   funcMap[urlPrefix+"/sysset/alarmServerShow"] = ssController.AlarmServerShow
   funcMap[urlPrefix+"/sysset/alarmEdit"] = ssController.AlarmEdit
   funcMap[urlPrefix+"/sysset/videoLenShow"] = ssController.VideoLenShow
   funcMap[urlPrefix+"/sysset/videoLenEdit"] = ssController.VideoLenEdit
   funcMap[urlPrefix+"/sysset/getServerInfo"] = ssController.GetServerInfo
   funcMap[urlPrefix+"/sysset/getDevInfo"] = ssController.GetDevInfo
   funcMap[urlPrefix+"/sysset/saveDeviceInfo"] = ssController.SaveDevInfo
   funcMap[urlPrefix+"/sysset/getFullDevInfo"] = ssController.GetFullDevInfo
   funcMap[urlPrefix+"/sysset/getResourceConfig"] = ssController.GetResourceConfig
   funcMap[urlPrefix+"/sysset/saveResourceConfig"] = ssController.SaveResourceConfig
   funcMap[urlPrefix+"/sysset/patchUpdate"] = ssController.PatchUpdateCheck
   funcMap[urlPrefix+"/sysset/patchUpdatePack"] = ssController.PatchUpdatePack
   funcMap[urlPrefix+"/sysset/clockInfo"] = ssController.GetClockInfo
   funcMap[urlPrefix+"/sysset/updateClock"] = ssController.SetSysClock
   funcMap[urlPrefix+"/sysset/ntpTest"] = ssController.TestNTPServer
   funcMap[urlPrefix+"/sysset/sysinfo"] = ssController.GetSysInfo
   funcMap[urlPrefix+"/sysset/sysThresholds"] = ssController.GetSysThresholds
   funcMap[urlPrefix+"/sysset/reboot"] = ssController.RebootOS
   funcMap[urlPrefix+"/sysset/rebootTask"] = ssController.GetRebootTask
   funcMap[urlPrefix+"/sysset/setRebootTask"] = ssController.SetRebootTask
   funcMap[urlPrefix+"/sysset/getNetWorkCards"] = ssController.GetNetWorkCards
   funcMap[urlPrefix+"/sysset/setNetWorkCard"] = ssController.SetNetWorkCard
   funcMap[urlPrefix+"/sysset/setSerName"] = ssController.SetSerName
   funcMap[urlPrefix+"/sysset/getLangs"] = ssController.GetLangs
   funcMap[urlPrefix+"/sysset/getLang"] = ssController.GetLang
   funcMap[urlPrefix+"/sysset/setLang"] = ssController.SetLang
   funcMap[urlPrefix+"/sysset/getKeyboardLayouts"] = ssController.GetKeyboardLayouts
   funcMap[urlPrefix+"/sysset/setKeyboardLayout"] = ssController.SetKeyboardLayout
   funcMap[urlPrefix+"/sysset/downNetCard"] = ssController.DownNetCard
   funcMap[urlPrefix+"/sysset/upNetCard"] = ssController.UpNetCard
   funcMap[urlPrefix+"/sysset/getSerInfo"] = ssController.GetSerInfo
   funcMap[urlPrefix+"/sysset/getNetWorkCardInfo"] = ssController.GetNetWorkCardInfo
   funcMap[urlPrefix+"/sysset/getWifiList"] = ssController.GetWifiList
   funcMap[urlPrefix+"/sysset/getDefKeyboardLayout"] = ssController.GetDefKeyboardLayout
   funcMap[urlPrefix+"/sysset/connectWifi"] = ssController.ConnectWifi
   funcMap[urlPrefix+"/sysset/getSysSetting"] = ssController.GetSysSetting
   funcMap[urlPrefix+"/sysset/updateSysSetting"] = ssController.UpdateSysSetting
   funcMap[urlPrefix+"/sysset/freedisk"] = ssController.DiskInfo
   funcMap[urlPrefix+"/sysset/showAuthInfo"] = ssController.ShowAuthInfo
   funcMap[urlPrefix+"/sysset/setAuthInfo"] = ssController.SetAuthInfo
   funcMap[urlPrefix+"/sysset/getDeviceInfo"] = ssController.GetDeviceInfo
   funcMap[urlPrefix+"/sysset/getDeviceAuthInfo"] = ssController.GetDeviceAuthInfo
   // 设置远程服务器
   funcMap[urlPrefix+"/sysset/getRemoteServer"] = ssController.GetRemoteServer
   funcMap[urlPrefix+"/sysset/setRemoteServer"] = ssController.SetRemoteServer
   funcMap[urlPrefix+"/cluster/findCluster"] = clusterController.FindCluster
   funcMap[urlPrefix+"/cluster/create"] = clusterController.Create
   funcMap[urlPrefix+"/cluster/search"] = clusterController.Search
   funcMap[urlPrefix+"/cluster/stopSearching"] = clusterController.StopSearching
   funcMap[urlPrefix+"/cluster/getSearchNodes"] = clusterController.GetSearchNodes
   funcMap[urlPrefix+"/cluster/joinCluster"] = clusterController.JoinCluster
   funcMap[urlPrefix+"/cluster/testSyncSql"] = clusterController.TestSyncSql
   funcMap[urlPrefix+"/cluster/updateClusterName"] = clusterController.UpdateClusterName
   funcMap[urlPrefix+"/cluster/leave"] = clusterController.Leave
   funcMap[urlPrefix+"/cluster/findIpByNode"] = clusterController.FindIpByNode
   sysMenuC := new(controllers.SysMenuController)
   funcMap["/data/api-u/sysmenus/tree"] = sysMenuC.MenuTree
   funcMap["/data/api-u/sysmenus/save"] = sysMenuC.Save
   roleC := new(controllers.SysRoleController)
   funcMap[urlPrefix+"/role/save"] = roleC.Save
   funcMap[urlPrefix+"/role/findAll"] = roleC.FindAll
   userC := new(controllers.UserController)
   funcMap["/data/api-u/sys/login"] = userC.Login
   funcMap["/data/api-v/user/login"] = userC.Login
   funcMap["/data/api-u/sys/logout"] = userC.Logout
   funcMap["/data/api-u/sys/refresh_token"] = userC.RefreshToken
   funcMap["/data/api-u/users/add"] = userC.Add
   funcMap["/data/api-u/users/findAllUser"] = userC.FindAllUser
   funcMap["/data/api-u/users/findById"] = userC.FindById
   funcMap["/data/api-u/users/saveAuth"] = userC.SaveAuth
   funcMap["/data/api-u/users/updatePwd"] = userC.UpdatePwd
   funcMap["/data/api-u/users/delUser"] = userC.DelUser
   funcMap["/data/api-u/users/uploadHeadPic"] = userC.UploadHeadPic
   funcMap["/data/api-u/users/updateProfile"] = userC.UpdateProfile
   funcMap["/data/api-u/users/defHeadPics"] = userC.DefHeadPics
   funcMap["/data/api-u/users/profile"] = userC.Profile
   funcMap[urlPrefix+"/voice/findAll"] = voiceC.FindAll
   funcMap[urlPrefix+"/voice/add"] = voiceC.Add
   funcMap[urlPrefix+"/voice/del"] = voiceC.Del
   funcMap[urlPrefix+"/voice/upload"] = voiceC.Upload
   funcMap[urlPrefix+"/dictionary/save"] = dictionaryC.Save
   funcMap[urlPrefix+"/dictionary/findByType"] = dictionaryC.FindByType
   funcMap[urlPrefix+"/dictionary/findByParentId"] = dictionaryC.FindByParentId
   funcMap[urlPrefix+"/dictionary/listByType"] = dictionaryC.ListByType
   funcMap[urlPrefix+"/info/getServerName"] = icController.GetServerName
   funcMap[urlPrefix+"/license/getRegisterCode"] = licenseController.GetRegisterCode
   funcMap[urlPrefix+"/license/save"] = licenseController.Save
   funcMap[urlPrefix+"/license/show"] = licenseController.Show
   funcMap[urlPrefix+"/swfs/syncSWFSNode"] = syncSWFSNodeController.SyncSWFSNode
   funcMap[urlPrefix+"/swfs/getSWFSPeers"] = syncSWFSNodeController.GetSWFSPeers
   funcMap[urlPrefix+"/es/node/synchronizeHosts"] = syncEsNodeController.SynchronizeHosts
   testController := new(controllers.TestControllers)
   funcMap[urlPrefix+"/test/createOriginalClusterT"] = testController.CreateOriginalClusterT
   funcMap[urlPrefix+"/test/addClusterT"] = testController.AddClusterT
   funcMap[urlPrefix+"/test/exitClusterT"] = testController.ExitClusterT
   funcMap[urlPrefix+"/test/createServer"] = testController.CreateServer
   funcMap[urlPrefix+"/test/addServer"] = testController.AddServer
   funcMap[urlPrefix+"/test/exitServer"] = testController.ExitServer
   deleteDataController := new(controllers.DeleteDataController)
   funcMap[urlPrefix+"/clearData/deleteData"] = deleteDataController.DeleteEsData
   var dac controllers.DevAuthController
   funcMap[urlPrefix+"/devAuth/authConfig"] = dac.AuthConfig
   funcMap[urlPrefix+"/devAuth/saveAuthConfig"] = dac.SaveAuthConfig
   funcMap[urlPrefix+"/devAuth/apply"] = dac.Apply
   funcMap[urlPrefix+"/devAuth/applyShow"] = dac.ApplyShow
   funcMap[urlPrefix+"/devAuth/approve"] = dac.Approve
   funcMap[urlPrefix+"/devAuth/authedList"] = dac.AuthedList
   var mqttc controllers.MqttController
   funcMap[urlPrefix+"/mqtt/conf"] = mqttc.GetConfig
   funcMap[urlPrefix+"/mqtt/saveConf"] = mqttc.SaveConfig
   var lorac controllers.LoraController
   funcMap[urlPrefix+"/lora/conf"] = lorac.GetConfig
   funcMap[urlPrefix+"/lora/saveConf"] = lorac.SaveConf
   var wific controllers.WifiController
   funcMap[urlPrefix+"/wifi/conf"] = wific.GetConfig
   funcMap[urlPrefix+"/wifi/saveConf"] = wific.SaveConf
   var sic controllers.SysInitController
   funcMap[urlPrefix+"/sysinit/getInitInfo"] = sic.GetInitInfo
   funcMap[urlPrefix+"/sysinit/savePassword"] = sic.SavePassword
   funcMap[urlPrefix+"/sysinit/networkList"] = sic.NetworkList
   funcMap[urlPrefix+"/sysinit/initNetwork"] = sic.InitNetwork
   funcMap[urlPrefix+"/sysinit/saveRegInfo"] = sic.SaveRegInfo
   funcMap[urlPrefix+"/sysinit/getRegInfo"] = sic.GetRegInfo
   psync := new(controllers.ProxySync)
   funcMap["/data/system/serf/sync"] = psync.Sync
   var pubTopics []string
   for key, _ := range funcMap {
      pubTopics = append(pubTopics, key)
   }
   return funcMap, pubTopics
}
//测试接收全网消息
func dealSubMsg(ctx context.Context, ms *bhomeclient.MicroNode) {
   for {
      select {
      case <-ctx.Done():
         return
      case msg := <-ms.SubCh:
         logger.Debug("recv sub msg topic:", string(msg.Topic), " data:", string(msg.Data))
         service.PersistentWrapper(string(msg.Topic), msg.Data)
      }
   }
}
package main
import (
   "context"
   "flag"
   "net/http"
   _ "net/http/pprof"
   "os"
   "os/signal"
   "syscall"
   "vamicro/config"
   "vamicro/extend/util"
   "vamicro/system-service/broadcast"
   "vamicro/system-service/controllers"
   "vamicro/system-service/models"
   "vamicro/system-service/serf"
   "vamicro/system-service/service"
   "vamicro/system-service/sys"
   versionControlS "vamicro/version-control/service"
   "basic.com/valib/bhomeclient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   vaversion "basic.com/valib/version.git"
)
var (
   procName = service.ProcName
   proc     = &bhomeclient.ProcInfo{
      Name: procName, //进程名称
      ID:   procName, //进程id
      Info: "",       //进程的描述信息,用于区分同一进程名称下多个进程
   }
   env = flag.String("e", "pro", "")
)
func init() {
   flag.Parse()
   vaversion.Usage()
   config.Init(*env)
   // 日志初始化
   var logFile = config.LogConf.Path + "vamicro-" + procName + ".log"
   logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge)
   logger.Info("log init success !")
}
func main() {
   // pprof 用于分析性能
   go func() {
      logger.Info(http.ListenAndServe("0.0.0.0:6078", nil))
   }()
   models.Init()
   defer models.CloseDB()
   models.GetDB().SetLogger(&serf.DbLogger{})
   fm, pubTopics := initFuncMap()
   ctx, cancel := context.WithCancel(context.Background())
   var reg = &bhomeclient.RegisterInfo{
      Proc:        *proc,
      Channel:     nil,
      PubTopic:    pubTopics,
      SubTopic:    []string{versionControlS.AuthorizationUpdateTopic},
      SubNetTopic: []string{},
   }
   q := make(chan os.Signal, 1)
   signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
   ms, err := bhomeclient.NewMicroNode(ctx, q, config.Server.AnalyServerId, reg, logger.Debug)
   if err != nil {
      return
   }
   bhomedbapi.InitGetNetNode(ms.GetLocalNetNodeByTopic)
   bhomedbapi.InitDoReq(ms.RequestOnly)
   bhomedbapi.InitLog(logger.Debug)
   util.AuthCheck(ctx) //授权检查
   go ms.StartServer(fm)
   go dealSubMsg(ctx, ms)
   serf.InitBusH(ms)
   serf.InitAgent(ctx)
   go service.WatchEsAndWeedfsIp(ms)
   go serf.StartSyncSqlToSerf()
   go service.StartSyncDev()
   go broadcast.StartServer() //设备可以被广播搜索
   //go service.CollectDeviceInfo(ctx, ms)
   go service.WatchAuthSetChange(ms) //根据授权文件监视通道数量变化
   //统计系统运行状态
   go sys.GatherStat()
   <-q
   ms.DeRegister()
   cancel()
   ms.Free()
}
const urlPrefix = "/data/api-v"
func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) {
   funcMap := make(map[string]bhomeclient.MicroFunc)
   ssController := new(controllers.SysSetController)
   clusterController := new(controllers.ClusterController)
   voiceC := new(controllers.VoiceController)
   dictionaryC := new(controllers.DictionaryController)
   icController := new(controllers.InfoController)
   licenseController := new(controllers.LicenseController)
   syncSWFSNodeController := new(controllers.SyncSWFSNodeController)
   syncEsNodeController := new(controllers.SyncEsNodeController)
   funcMap[urlPrefix+"/sysset/alarmServerShow"] = ssController.AlarmServerShow
   funcMap[urlPrefix+"/sysset/alarmEdit"] = ssController.AlarmEdit
   funcMap[urlPrefix+"/sysset/videoLenShow"] = ssController.VideoLenShow
   funcMap[urlPrefix+"/sysset/videoLenEdit"] = ssController.VideoLenEdit
   funcMap[urlPrefix+"/sysset/getServerInfo"] = ssController.GetServerInfo
   funcMap[urlPrefix+"/sysset/getDevInfo"] = ssController.GetDevInfo
   funcMap[urlPrefix+"/sysset/saveDeviceInfo"] = ssController.SaveDevInfo
   funcMap[urlPrefix+"/sysset/getFullDevInfo"] = ssController.GetFullDevInfo
   funcMap[urlPrefix+"/sysset/getResourceConfig"] = ssController.GetResourceConfig
   funcMap[urlPrefix+"/sysset/saveResourceConfig"] = ssController.SaveResourceConfig
   funcMap[urlPrefix+"/sysset/patchUpdate"] = ssController.PatchUpdateCheck
   funcMap[urlPrefix+"/sysset/patchUpdatePack"] = ssController.PatchUpdatePack
   funcMap[urlPrefix+"/sysset/clockInfo"] = ssController.GetClockInfo
   funcMap[urlPrefix+"/sysset/updateClock"] = ssController.SetSysClock
   funcMap[urlPrefix+"/sysset/ntpTest"] = ssController.TestNTPServer
   funcMap[urlPrefix+"/sysset/sysinfo"] = ssController.GetSysInfo
   funcMap[urlPrefix+"/sysset/sysThresholds"] = ssController.GetSysThresholds
   funcMap[urlPrefix+"/sysset/reboot"] = ssController.RebootOS
   funcMap[urlPrefix+"/sysset/rebootTask"] = ssController.GetRebootTask
   funcMap[urlPrefix+"/sysset/setRebootTask"] = ssController.SetRebootTask
   funcMap[urlPrefix+"/sysset/getNetWorkCards"] = ssController.GetNetWorkCards
   funcMap[urlPrefix+"/sysset/setNetWorkCard"] = ssController.SetNetWorkCard
   funcMap[urlPrefix+"/sysset/setSerName"] = ssController.SetSerName
   funcMap[urlPrefix+"/sysset/getLangs"] = ssController.GetLangs
   funcMap[urlPrefix+"/sysset/getLang"] = ssController.GetLang
   funcMap[urlPrefix+"/sysset/setLang"] = ssController.SetLang
   funcMap[urlPrefix+"/sysset/getKeyboardLayouts"] = ssController.GetKeyboardLayouts
   funcMap[urlPrefix+"/sysset/setKeyboardLayout"] = ssController.SetKeyboardLayout
   funcMap[urlPrefix+"/sysset/downNetCard"] = ssController.DownNetCard
   funcMap[urlPrefix+"/sysset/upNetCard"] = ssController.UpNetCard
   funcMap[urlPrefix+"/sysset/getSerInfo"] = ssController.GetSerInfo
   funcMap[urlPrefix+"/sysset/getNetWorkCardInfo"] = ssController.GetNetWorkCardInfo
   funcMap[urlPrefix+"/sysset/getWifiList"] = ssController.GetWifiList
   funcMap[urlPrefix+"/sysset/getDefKeyboardLayout"] = ssController.GetDefKeyboardLayout
   funcMap[urlPrefix+"/sysset/connectWifi"] = ssController.ConnectWifi
   funcMap[urlPrefix+"/sysset/getSysSetting"] = ssController.GetSysSetting
   funcMap[urlPrefix+"/sysset/updateSysSetting"] = ssController.UpdateSysSetting
   funcMap[urlPrefix+"/sysset/freedisk"] = ssController.DiskInfo
   funcMap[urlPrefix+"/sysset/showAuthInfo"] = ssController.ShowAuthInfo
   funcMap[urlPrefix+"/sysset/setAuthInfo"] = ssController.SetAuthInfo
   funcMap[urlPrefix+"/sysset/getDeviceInfo"] = ssController.GetDeviceInfo
   funcMap[urlPrefix+"/sysset/getDeviceAuthInfo"] = ssController.GetDeviceAuthInfo
   // 设置远程服务器
   funcMap[urlPrefix+"/sysset/getRemoteServer"] = ssController.GetRemoteServer
   funcMap[urlPrefix+"/sysset/setRemoteServer"] = ssController.SetRemoteServer
   funcMap[urlPrefix+"/cluster/findCluster"] = clusterController.FindCluster
   funcMap[urlPrefix+"/cluster/create"] = clusterController.Create
   funcMap[urlPrefix+"/cluster/search"] = clusterController.Search
   funcMap[urlPrefix+"/cluster/stopSearching"] = clusterController.StopSearching
   funcMap[urlPrefix+"/cluster/getSearchNodes"] = clusterController.GetSearchNodes
   funcMap[urlPrefix+"/cluster/joinCluster"] = clusterController.JoinCluster
   funcMap[urlPrefix+"/cluster/testSyncSql"] = clusterController.TestSyncSql
   funcMap[urlPrefix+"/cluster/updateClusterName"] = clusterController.UpdateClusterName
   funcMap[urlPrefix+"/cluster/leave"] = clusterController.Leave
   funcMap[urlPrefix+"/cluster/findIpByNode"] = clusterController.FindIpByNode
   sysMenuC := new(controllers.SysMenuController)
   funcMap["/data/api-u/sysmenus/tree"] = sysMenuC.MenuTree
   funcMap["/data/api-u/sysmenus/save"] = sysMenuC.Save
   roleC := new(controllers.SysRoleController)
   funcMap[urlPrefix+"/role/save"] = roleC.Save
   funcMap[urlPrefix+"/role/findAll"] = roleC.FindAll
   userC := new(controllers.UserController)
   funcMap["/data/api-u/sys/login"] = userC.Login
   funcMap["/data/api-v/user/login"] = userC.Login
   funcMap["/data/api-u/sys/logout"] = userC.Logout
   funcMap["/data/api-u/sys/refresh_token"] = userC.RefreshToken
   funcMap["/data/api-u/users/add"] = userC.Add
   funcMap["/data/api-u/users/findAllUser"] = userC.FindAllUser
   funcMap["/data/api-u/users/findById"] = userC.FindById
   funcMap["/data/api-u/users/saveAuth"] = userC.SaveAuth
   funcMap["/data/api-u/users/updatePwd"] = userC.UpdatePwd
   funcMap["/data/api-u/users/delUser"] = userC.DelUser
   funcMap["/data/api-u/users/uploadHeadPic"] = userC.UploadHeadPic
   funcMap["/data/api-u/users/updateProfile"] = userC.UpdateProfile
   funcMap["/data/api-u/users/defHeadPics"] = userC.DefHeadPics
   funcMap["/data/api-u/users/profile"] = userC.Profile
   funcMap[urlPrefix+"/voice/findAll"] = voiceC.FindAll
   funcMap[urlPrefix+"/voice/add"] = voiceC.Add
   funcMap[urlPrefix+"/voice/del"] = voiceC.Del
   funcMap[urlPrefix+"/voice/upload"] = voiceC.Upload
   funcMap[urlPrefix+"/dictionary/save"] = dictionaryC.Save
   funcMap[urlPrefix+"/dictionary/findByType"] = dictionaryC.FindByType
   funcMap[urlPrefix+"/dictionary/findByParentId"] = dictionaryC.FindByParentId
   funcMap[urlPrefix+"/dictionary/listByType"] = dictionaryC.ListByType
   funcMap[urlPrefix+"/info/getServerName"] = icController.GetServerName
   funcMap[urlPrefix+"/license/getRegisterCode"] = licenseController.GetRegisterCode
   funcMap[urlPrefix+"/license/save"] = licenseController.Save
   funcMap[urlPrefix+"/license/show"] = licenseController.Show
   funcMap[urlPrefix+"/swfs/syncSWFSNode"] = syncSWFSNodeController.SyncSWFSNode
   funcMap[urlPrefix+"/swfs/getSWFSPeers"] = syncSWFSNodeController.GetSWFSPeers
   funcMap[urlPrefix+"/es/node/synchronizeHosts"] = syncEsNodeController.SynchronizeHosts
   testController := new(controllers.TestControllers)
   funcMap[urlPrefix+"/test/createOriginalClusterT"] = testController.CreateOriginalClusterT
   funcMap[urlPrefix+"/test/addClusterT"] = testController.AddClusterT
   funcMap[urlPrefix+"/test/exitClusterT"] = testController.ExitClusterT
   funcMap[urlPrefix+"/test/createServer"] = testController.CreateServer
   funcMap[urlPrefix+"/test/addServer"] = testController.AddServer
   funcMap[urlPrefix+"/test/exitServer"] = testController.ExitServer
   deleteDataController := new(controllers.DeleteDataController)
   funcMap[urlPrefix+"/clearData/deleteData"] = deleteDataController.DeleteEsData
   var dac controllers.DevAuthController
   funcMap[urlPrefix+"/devAuth/authConfig"] = dac.AuthConfig
   funcMap[urlPrefix+"/devAuth/saveAuthConfig"] = dac.SaveAuthConfig
   funcMap[urlPrefix+"/devAuth/apply"] = dac.Apply
   funcMap[urlPrefix+"/devAuth/applyShow"] = dac.ApplyShow
   funcMap[urlPrefix+"/devAuth/approve"] = dac.Approve
   funcMap[urlPrefix+"/devAuth/authedList"] = dac.AuthedList
   var mqttc controllers.MqttController
   funcMap[urlPrefix+"/mqtt/conf"] = mqttc.GetConfig
   funcMap[urlPrefix+"/mqtt/saveConf"] = mqttc.SaveConfig
   var lorac controllers.LoraController
   funcMap[urlPrefix+"/lora/conf"] = lorac.GetConfig
   funcMap[urlPrefix+"/lora/saveConf"] = lorac.SaveConf
   var wific controllers.WifiController
   funcMap[urlPrefix+"/wifi/conf"] = wific.GetConfig
   funcMap[urlPrefix+"/wifi/saveConf"] = wific.SaveConf
   var sic controllers.SysInitController
   funcMap[urlPrefix+"/sysinit/getInitInfo"] = sic.GetInitInfo
   funcMap[urlPrefix+"/sysinit/savePassword"] = sic.SavePassword
   funcMap[urlPrefix+"/sysinit/networkList"] = sic.NetworkList
   funcMap[urlPrefix+"/sysinit/initNetwork"] = sic.InitNetwork
   funcMap[urlPrefix+"/sysinit/saveRegInfo"] = sic.SaveRegInfo
   funcMap[urlPrefix+"/sysinit/getRegInfo"] = sic.GetRegInfo
   psync := new(controllers.ProxySync)
   funcMap["/data/system/serf/sync"] = psync.Sync
   var pubTopics []string
   for key, _ := range funcMap {
      pubTopics = append(pubTopics, key)
   }
   return funcMap, pubTopics
}
//测试接收全网消息
func dealSubMsg(ctx context.Context, ms *bhomeclient.MicroNode) {
   for {
      select {
      case <-ctx.Done():
         return
      case msg := <-ms.SubCh:
         logger.Debug("recv sub msg topic:", string(msg.Topic), " data:", string(msg.Data))
         service.PersistentWrapper(string(msg.Topic), msg.Data)
      }
   }
}