This commit is contained in:
matst80
2024-11-08 21:58:28 +01:00
parent dfcdf0939f
commit 65a969443a
13 changed files with 437 additions and 173 deletions

View File

@@ -12,26 +12,26 @@ import (
type DiskStorage struct {
stateFile string
lastSave int64
LastSaves map[string]int64
LastSaves map[CartId]int64
}
func NewDiskStorage(stateFile string) (*DiskStorage, error) {
ret := &DiskStorage{
stateFile: stateFile,
LastSaves: make(map[string]int64),
LastSaves: make(map[CartId]int64),
}
err := ret.loadState()
return ret, err
}
func saveMessages(messages []StorableMessage, id string) error {
func saveMessages(messages []StorableMessage, id CartId) error {
log.Printf("%d messages to save for %s", len(messages), id)
if len(messages) == 0 {
return nil
}
var file *os.File
var err error
path := getCartPath(id)
path := getCartPath(id.String())
file, err = os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
@@ -39,11 +39,10 @@ func saveMessages(messages []StorableMessage, id string) error {
defer file.Close()
for _, m := range messages {
b, err := m.GetBytes()
err := m.Write(file)
if err != nil {
return err
}
file.Write(b)
}
return err
}
@@ -52,9 +51,9 @@ func getCartPath(id string) string {
return fmt.Sprintf("data/%s.prot", id)
}
func loadMessages(grain Grain, id string) error {
func loadMessages(grain Grain, id CartId) error {
var err error
path := getCartPath(id)
path := getCartPath(id.String())
if _, err = os.Stat(path); errors.Is(err, os.ErrNotExist) {
return err
}
@@ -64,13 +63,11 @@ func loadMessages(grain Grain, id string) error {
}
defer file.Close()
var reply CartGrain
for err == nil {
msg := &Message{}
err = msg.FromReader(file, msg)
var msg Message
err = MessageFromReader(file, &msg)
if err == nil {
grain.HandleMessage(msg, true, &reply)
grain.HandleMessage(&msg, true)
}
}
@@ -105,7 +102,7 @@ func (s *DiskStorage) loadState() error {
return json.NewDecoder(file).Decode(&s.LastSaves)
}
func (s *DiskStorage) Store(id string, grain Grain) error {
func (s *DiskStorage) Store(id CartId, grain *CartGrain) error {
lastSavedMessage, ok := s.LastSaves[id]
if ok && lastSavedMessage > grain.GetLastChange() {
return nil