From 87e8f00cd6c4597082d346534c00a8a17f1fe6af Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Sun, 2 Jun 2024 22:13:54 +0100 Subject: [PATCH] Refactor saving session and system data to prevent saving older saves on previous waves (#26) * chore: Refactor saving session data to prevent saving older sessions * chore: Refactor saving system data to prevent saving older sessions * Refactor saving session and system data to prevent saving older versions --- db/savedata.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/db/savedata.go b/db/savedata.go index bb792c5..bb593b8 100644 --- a/db/savedata.go +++ b/db/savedata.go @@ -20,6 +20,7 @@ package db import ( "bytes" "encoding/gob" + "errors" "github.com/pagefaultgames/rogueserver/defs" ) @@ -69,8 +70,13 @@ func ReadSystemSaveData(uuid []byte) (defs.SystemSaveData, error) { } func StoreSystemSaveData(uuid []byte, data defs.SystemSaveData) error { + systemData, err := ReadSystemSaveData(uuid) + if err == nil && systemData.Timestamp > data.Timestamp { + return errors.New("attempted to save an older system save") + } + var buf bytes.Buffer - err := gob.NewEncoder(&buf).Encode(data) + err = gob.NewEncoder(&buf).Encode(data) if err != nil { return err } @@ -120,8 +126,13 @@ func GetLatestSessionSaveDataSlot(uuid []byte) (int, error) { } func StoreSessionSaveData(uuid []byte, data defs.SessionSaveData, slot int) error { + session, err := ReadSessionSaveData(uuid, slot) + if err == nil && session.Seed == data.Seed && session.WaveIndex > data.WaveIndex { + return errors.New("attempted to save an older session") + } + var buf bytes.Buffer - err := gob.NewEncoder(&buf).Encode(data) + err = gob.NewEncoder(&buf).Encode(data) if err != nil { return err }