init
This commit is contained in:
parent
44da7c7b85
commit
596cb051fd
|
@ -0,0 +1,122 @@
|
||||||
|
package srvdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var fileSignMap = make(map[string]string)
|
||||||
|
|
||||||
|
type DataLoader interface {
|
||||||
|
Load(fileFullPath string) error
|
||||||
|
Reload(fileFullPath string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type DataHolder interface {
|
||||||
|
unmarshal([]byte) error
|
||||||
|
reunmarshal([]byte) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type JsonDataLoader struct {
|
||||||
|
dh DataHolder
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *JsonDataLoader) Load(fileFullPath string) error {
|
||||||
|
buf, err := os.ReadFile(fileFullPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
h := md5.New()
|
||||||
|
_, err = h.Write(buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fileSign := hex.EncodeToString(h.Sum(nil))
|
||||||
|
fileSignMap[fileFullPath] = fileSign
|
||||||
|
|
||||||
|
if this.dh != nil {
|
||||||
|
err = this.dh.unmarshal(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *JsonDataLoader) Reload(fileFullPath string) error {
|
||||||
|
buf, err := os.ReadFile(fileFullPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
h := md5.New()
|
||||||
|
_, err = h.Write(buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fileSign := hex.EncodeToString(h.Sum(nil))
|
||||||
|
if preSign, exist := fileSignMap[fileFullPath]; exist {
|
||||||
|
if preSign == fileSign {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fileSignMap[fileFullPath] = fileSign
|
||||||
|
|
||||||
|
if this.dh != nil {
|
||||||
|
err = this.dh.reunmarshal(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProtobufDataLoader struct {
|
||||||
|
dh DataHolder
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ProtobufDataLoader) Load(fileFullPath string) error {
|
||||||
|
buf, err := os.ReadFile(fileFullPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
h := md5.New()
|
||||||
|
_, err = h.Write(buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fileSign := hex.EncodeToString(h.Sum(nil))
|
||||||
|
fileSignMap[fileFullPath] = fileSign
|
||||||
|
|
||||||
|
if this.dh != nil {
|
||||||
|
err = this.dh.unmarshal(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ProtobufDataLoader) Reload(fileFullPath string) error {
|
||||||
|
buf, err := os.ReadFile(fileFullPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
h := md5.New()
|
||||||
|
_, err = h.Write(buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fileSign := hex.EncodeToString(h.Sum(nil))
|
||||||
|
if preSign, exist := fileSignMap[fileFullPath]; exist {
|
||||||
|
if preSign == fileSign {
|
||||||
|
return errors.New("content no modify")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fileSignMap[fileFullPath] = fileSign
|
||||||
|
|
||||||
|
if this.dh != nil {
|
||||||
|
err = this.dh.reunmarshal(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package srvdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var DataMgr = &dataMgr{
|
||||||
|
loaders: make(map[string]DataLoader),
|
||||||
|
cacheGameFreeId: make(map[int32]CacheGameType),
|
||||||
|
}
|
||||||
|
|
||||||
|
type dataMgr struct {
|
||||||
|
loaders map[string]DataLoader
|
||||||
|
cacheGameFreeId map[int32]CacheGameType
|
||||||
|
}
|
||||||
|
type CacheGameType struct {
|
||||||
|
Ids []int32
|
||||||
|
GameType int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *dataMgr) RegisteLoader(name string, loader DataLoader) {
|
||||||
|
this.loaders[strings.ToLower(name)] = loader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *dataMgr) GetLoader(name string) DataLoader {
|
||||||
|
if loader, exist := this.loaders[strings.ToLower(name)]; exist {
|
||||||
|
return loader
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *dataMgr) GetGameFreeIds(gameId, gameMode int32) (ids []int32, gameType int32) {
|
||||||
|
key := gameId<<16 | gameMode
|
||||||
|
if data, exist := this.cacheGameFreeId[key]; exist {
|
||||||
|
return data.Ids, data.GameType
|
||||||
|
} else {
|
||||||
|
for _, dbGameFree := range PBDB_GameFreeMgr.Datas.Arr {
|
||||||
|
if dbGameFree.GetGameId() == gameId && dbGameFree.GetGameMode() == gameMode {
|
||||||
|
ids = append(ids, dbGameFree.GetId())
|
||||||
|
gameType = dbGameFree.GetGameType()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.cacheGameFreeId[key] = CacheGameType{Ids: ids, GameType: gameType}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DataMgrAfter 配置文件监听器,这个加载数据会在DataMgr之后
|
||||||
|
var DataMgrAfter = &dataMgrAfter{
|
||||||
|
loaders: make(map[string][]DataLoader),
|
||||||
|
}
|
||||||
|
|
||||||
|
type dataMgrAfter struct {
|
||||||
|
loaders map[string][]DataLoader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *dataMgrAfter) RegisterLoader(name string, loader DataLoader) {
|
||||||
|
this.loaders[strings.ToLower(name)] = append(this.loaders[strings.ToLower(name)], loader)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *dataMgrAfter) GetLoader(name string) []DataLoader {
|
||||||
|
if loader, exist := this.loaders[strings.ToLower(name)]; exist {
|
||||||
|
return loader
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue