diff options
Diffstat (limited to 'server/data.go')
| -rw-r--r-- | server/data.go | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/server/data.go b/server/data.go index b7ed280..331ac38 100644 --- a/server/data.go +++ b/server/data.go @@ -2,7 +2,8 @@ package server import ( "os" - "encoding/binary" + "bufio" + "encoding/json" "git.citrons.xyz/metronode/phony" ) @@ -53,13 +54,14 @@ func (f atomicWriter) Close() error { } func saveDataFile[T any](from phony.Actor, name string, data T) { - f, err := createAtomic(from, "world/" + name + ".bin") + f, err := createAtomic(from, "world/" + name + ".json") if err != nil { dataManager.errHand.OnSaveError(from, err) return } defer f.Close() - err = binary.Write(f, binary.BigEndian, data) + enc := json.NewEncoder(f) + err = enc.Encode(data) if err != nil { dataManager.errHand.OnSaveError(from, err) } @@ -68,7 +70,14 @@ func saveDataFile[T any](from phony.Actor, name string, data T) { func loadDataFile[T any]( from phony.Actor, name string, reply func(data T, ok bool)) { dataManager.Act(from, func() { - f, err := os.Open("world/" + name + ".bin") + var ( + data T + f *os.File + err error + ) + defer from.Act(nil, func() {reply(data, err == nil)}) + + f, err = os.Open("world/" + name + ".json") if err != nil { if !os.IsNotExist(err) { dataManager.errHand.OnLoadError(&dataManager, err) @@ -76,12 +85,25 @@ func loadDataFile[T any]( return } defer f.Close() - var data T - err = binary.Read(f, binary.BigEndian, &data) + + dec := json.NewDecoder(f) + err = dec.Decode(&data) if err != nil { dataManager.errHand.OnLoadError(&dataManager, err) + return } - from.Act(nil, func() {reply(data, err == nil)}) }) } +func readDataField(rd *bufio.Reader, data any) error { + line, err := rd.ReadBytes('\n') + if err != nil { + return err + } + return json.Unmarshal(line, data) +} + +func writeDataField(wr *bufio.Writer, data any) error { + enc := json.NewEncoder(wr) + return enc.Encode(data) +} |
