59 lines
885 B
Go
59 lines
885 B
Go
package master
|
|
|
|
import (
|
|
"bdgrp_go/pbutil"
|
|
"bdgrp_go/utils"
|
|
"bytes"
|
|
"compress/bzip2"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
cache map[string]any
|
|
mu sync.RWMutex
|
|
)
|
|
|
|
func GetMaster() map[string]any {
|
|
mu.RLock()
|
|
if cache != nil {
|
|
mu.RUnlock()
|
|
return cache
|
|
}
|
|
mu.RUnlock()
|
|
return ReloadMaster()
|
|
}
|
|
|
|
func ReloadMaster() map[string]any {
|
|
server := os.Getenv("SERVER")
|
|
filePath := filepath.Join("resp", server, "suitemaster.bz2")
|
|
|
|
fileBuffer, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return cache
|
|
}
|
|
|
|
decrypted, err := utils.Decrypt(fileBuffer)
|
|
if err != nil {
|
|
return cache
|
|
}
|
|
|
|
decompressed, err := io.ReadAll(bzip2.NewReader(bytes.NewReader(decrypted)))
|
|
if err != nil {
|
|
return cache
|
|
}
|
|
|
|
result, err := pbutil.Decode("SuiteMasterGetResponse", decompressed)
|
|
if err != nil {
|
|
return cache
|
|
}
|
|
|
|
mu.Lock()
|
|
cache = result
|
|
mu.Unlock()
|
|
|
|
return cache
|
|
}
|