兼容配置导出工具的加载实现
This commit is contained in:
parent
c9b53b9aed
commit
defeac306a
|
@ -0,0 +1,78 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
jsonIter "github.com/json-iterator/go"
|
||||
"github.com/kercylan98/minotaur/utils/log"
|
||||
"github.com/kercylan98/minotaur/utils/timer"
|
||||
"go.uber.org/zap"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type LoadHandle func(handle func(filename string, config any) error)
|
||||
type RefreshHandle func()
|
||||
|
||||
const (
|
||||
tickerLoadRefresh = "_tickerLoadRefresh"
|
||||
)
|
||||
|
||||
var (
|
||||
cLoadDir string
|
||||
cTicker *timer.Ticker
|
||||
cInterval time.Duration
|
||||
cLoadHandle LoadHandle
|
||||
cRefreshHandle RefreshHandle
|
||||
json = jsonIter.ConfigCompatibleWithStandardLibrary
|
||||
mutex sync.Mutex
|
||||
)
|
||||
|
||||
func Init(loadDir string, loadHandle LoadHandle, refreshHandle RefreshHandle) {
|
||||
cLoadDir = loadDir
|
||||
cLoadHandle = loadHandle
|
||||
cRefreshHandle = refreshHandle
|
||||
}
|
||||
|
||||
func Load() {
|
||||
mutex.Lock()
|
||||
if cTicker != nil {
|
||||
WithTickerLoad(cTicker, cInterval)
|
||||
} else {
|
||||
cLoadHandle(func(filename string, config any) error {
|
||||
bytes, err := os.ReadFile(filepath.Join(cLoadDir, filename))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = json.Unmarshal(bytes, &config); err == nil {
|
||||
log.Error("Config", zap.String("Name", filename), zap.Bool("LoadSuccess", true))
|
||||
}
|
||||
return err
|
||||
})
|
||||
}
|
||||
mutex.Unlock()
|
||||
}
|
||||
|
||||
func WithTickerLoad(ticker *timer.Ticker, interval time.Duration) {
|
||||
if ticker != cTicker && cTicker != nil {
|
||||
cTicker.StopTimer(tickerLoadRefresh)
|
||||
}
|
||||
cTicker = ticker
|
||||
cInterval = interval
|
||||
cTicker.Loop(tickerLoadRefresh, timer.Instantly, cInterval, timer.Forever, func() {
|
||||
Load()
|
||||
Refresh()
|
||||
})
|
||||
}
|
||||
|
||||
func StopTickerLoad() {
|
||||
if cTicker != nil {
|
||||
cTicker.StopTimer(tickerLoadRefresh)
|
||||
}
|
||||
}
|
||||
|
||||
func Refresh() {
|
||||
mutex.Lock()
|
||||
cRefreshHandle()
|
||||
mutex.Unlock()
|
||||
}
|
Loading…
Reference in New Issue