game_sync/dbproxy/mongo/config.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{})
}