1 package battlemap 2 3 import ( 4 "fmt" 5 "io" 6 7 "vimagination.zapto.org/keystore" 8 ) 9 10 type config struct { 11 BaseDir string 12 memStore *keystore.MemStore 13 fileStore *keystore.FileStore 14 } 15 16 const configFile = "config" 17 18 func (c *config) Init(baseDir string) error { 19 c.BaseDir = baseDir 20 c.memStore = keystore.NewMemStore() 21 c.memStore.SetAll(map[string]io.WriterTo{ 22 "ServerPort": keystore.Uint16(8080), 23 "ImageAssetsDir": keystore.String("assets/images"), 24 "AudioAssetsDir": keystore.String("assets/audio"), 25 "MusicPacksDir": keystore.String("musicPacks"), 26 "CharsDir": keystore.String("characters"), 27 "MapsDir": keystore.String("maps"), 28 "FilesDir": keystore.String("files"), 29 "PluginsDir": keystore.String("plugins"), 30 "TokensDir": keystore.String("tokens"), 31 }) 32 var err error 33 c.fileStore, err = keystore.NewFileStore(baseDir, baseDir, keystore.NoMangle) 34 if err != nil { 35 return fmt.Errorf("error creating config store: %w", err) 36 } 37 err = c.fileStore.Get(configFile, c.memStore) 38 if err != nil && err != keystore.ErrUnknownKey { 39 return fmt.Errorf("error parsing config data: %w", err) 40 } 41 return nil 42 } 43 44 func (c *config) Get(key string, data io.ReaderFrom) error { 45 return c.memStore.Get(key, data) 46 } 47 48 func (c *config) Set(key string, data io.WriterTo) error { 49 if err := c.memStore.Set(key, data); err != nil { 50 return err 51 } 52 return c.fileStore.Set(configFile, c.memStore) 53 } 54 55 func (c *config) SetAll(data map[string]io.WriterTo) error { 56 if err := c.memStore.SetAll(data); err != nil { 57 return err 58 } 59 return c.fileStore.Set(configFile, c.memStore) 60 } 61