71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package mongo
|
|
|
|
import (
|
|
"github.com/howeyc/fsnotify"
|
|
"mongo.games.com/goserver/core"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
/*
|
|
当数据库配置文件修改后实时更新mongo数据库连接
|
|
*/
|
|
|
|
type Configuration struct {
|
|
CfgFile string // 数据库配置文件路径
|
|
watcher *fsnotify.Watcher
|
|
}
|
|
|
|
func (c *Configuration) Name() string {
|
|
return "cmgo"
|
|
}
|
|
|
|
func (c *Configuration) Init() error {
|
|
MgoSessionMgrSington.LoadConfig(c.CfgFile)
|
|
|
|
var err error
|
|
c.watcher, err = fsnotify.NewWatcher()
|
|
if err != nil {
|
|
logger.Logger.Warnf("%s NewWatcher err:%v", c.CfgFile, err)
|
|
return err
|
|
}
|
|
err = c.watcher.Watch(c.CfgFile)
|
|
if err != nil {
|
|
logger.Logger.Warnf("%s Watch err:%v", c.CfgFile, err)
|
|
return err
|
|
}
|
|
|
|
go func() {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
logger.Logger.Warnf("%s watch modify goroutine err:%v", c.CfgFile, err)
|
|
}
|
|
}()
|
|
for {
|
|
select {
|
|
case ev, ok := <-c.watcher.Event:
|
|
if ok && ev != nil {
|
|
if ev.IsModify() {
|
|
MgoSessionMgrSington.LoadConfig(c.CfgFile)
|
|
}
|
|
} else {
|
|
return
|
|
}
|
|
case err := <-c.watcher.Error:
|
|
logger.Logger.Info("fsnotify error:", err)
|
|
}
|
|
}
|
|
logger.Logger.Warnf("%s watcher quit!", c.CfgFile)
|
|
}()
|
|
return nil
|
|
}
|
|
|
|
func (c *Configuration) Close() error {
|
|
c.watcher.Close()
|
|
MgoSessionMgrSington.Close()
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
core.RegistePackage(&Configuration{})
|
|
}
|