refactor: storage namings
This commit is contained in:
@@ -28,6 +28,8 @@ func (i GameID) String() string {
|
|||||||
|
|
||||||
type State struct {
|
type State struct {
|
||||||
// TODO: store user's login key
|
// TODO: store user's login key
|
||||||
|
ClientCurrentVersion string `json:"clientCurrentVersion"`
|
||||||
|
ClientNextVersion *string `json:"clientNextVersion,omitempty"`
|
||||||
GameState []GameState `json:"gameState"`
|
GameState []GameState `json:"gameState"`
|
||||||
ActiveGameID GameID `json:"activeGameId"`
|
ActiveGameID GameID `json:"activeGameId"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ func NewFS(storageRoot string) (*fsStorage, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) StateExists(callback func(bool, error)) {
|
func (s *fsStorage) StateExistsAsync(callback func(bool, error)) {
|
||||||
go func() {
|
go func() {
|
||||||
exists, err := s.FileExists(stateFileName)
|
exists, err := s.FileExists(stateFileName)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -109,7 +109,7 @@ func (s *fsStorage) StateExists(callback func(bool, error)) {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) LoadState(callback func(client.State, error)) {
|
func (s *fsStorage) LoadStateAsync(callback func(client.State, error)) {
|
||||||
go func() {
|
go func() {
|
||||||
state, err := s.loadStateSync()
|
state, err := s.loadStateSync()
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -118,7 +118,7 @@ func (s *fsStorage) LoadState(callback func(client.State, error)) {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) SaveState(state client.State, callback func(error)) {
|
func (s *fsStorage) SaveStateAsync(state client.State, callback func(error)) {
|
||||||
go func() {
|
go func() {
|
||||||
err := s.saveStateSync(state)
|
err := s.saveStateSync(state)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -127,7 +127,7 @@ func (s *fsStorage) SaveState(state client.State, callback func(error)) {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) LoadReport(id client.GameID, turn uint, callback func(report.Report, error)) {
|
func (s *fsStorage) LoadReportAsync(id client.GameID, turn uint, callback func(report.Report, error)) {
|
||||||
go func() {
|
go func() {
|
||||||
rep, err := s.loadReportSync(id, turn)
|
rep, err := s.loadReportSync(id, turn)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -136,7 +136,7 @@ func (s *fsStorage) LoadReport(id client.GameID, turn uint, callback func(report
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) SaveReport(id client.GameID, turn uint, rep report.Report, callback func(error)) {
|
func (s *fsStorage) SaveReportAsync(id client.GameID, turn uint, rep report.Report, callback func(error)) {
|
||||||
go func() {
|
go func() {
|
||||||
err := s.saveReportSync(id, turn, rep)
|
err := s.saveReportSync(id, turn, rep)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -145,7 +145,7 @@ func (s *fsStorage) SaveReport(id client.GameID, turn uint, rep report.Report, c
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) LoadOrder(id client.GameID, turn uint, callback func(order.Order, error)) {
|
func (s *fsStorage) LoadOrderAsync(id client.GameID, turn uint, callback func(order.Order, error)) {
|
||||||
go func() {
|
go func() {
|
||||||
o, err := s.loadOrderSync(id, turn)
|
o, err := s.loadOrderSync(id, turn)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
@@ -154,7 +154,7 @@ func (s *fsStorage) LoadOrder(id client.GameID, turn uint, callback func(order.O
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fsStorage) SaveOrder(id client.GameID, turn uint, o order.Order, callback func(error)) {
|
func (s *fsStorage) SaveOrderAsync(id client.GameID, turn uint, o order.Order, callback func(error)) {
|
||||||
go func() {
|
go func() {
|
||||||
err := s.saveOrderSync(id, turn, o)
|
err := s.saveOrderSync(id, turn, o)
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
|
|||||||
+10
-10
@@ -27,7 +27,7 @@ func TestStateRoundTripAsync(t *testing.T) {
|
|||||||
want := sampleState()
|
want := sampleState()
|
||||||
|
|
||||||
saveDone := make(chan error, 1)
|
saveDone := make(chan error, 1)
|
||||||
s.SaveState(want, func(err error) {
|
s.SaveStateAsync(want, func(err error) {
|
||||||
saveDone <- err
|
saveDone <- err
|
||||||
})
|
})
|
||||||
if err := waitError(t, saveDone); err != nil {
|
if err := waitError(t, saveDone); err != nil {
|
||||||
@@ -35,7 +35,7 @@ func TestStateRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
existsDone := make(chan callbackResult[bool], 1)
|
existsDone := make(chan callbackResult[bool], 1)
|
||||||
s.StateExists(func(ok bool, err error) {
|
s.StateExistsAsync(func(ok bool, err error) {
|
||||||
existsDone <- callbackResult[bool]{value: ok, err: err}
|
existsDone <- callbackResult[bool]{value: ok, err: err}
|
||||||
})
|
})
|
||||||
exists := waitResult(t, existsDone)
|
exists := waitResult(t, existsDone)
|
||||||
@@ -47,7 +47,7 @@ func TestStateRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadDone := make(chan callbackResult[client.State], 1)
|
loadDone := make(chan callbackResult[client.State], 1)
|
||||||
s.LoadState(func(state client.State, err error) {
|
s.LoadStateAsync(func(state client.State, err error) {
|
||||||
loadDone <- callbackResult[client.State]{value: state, err: err}
|
loadDone <- callbackResult[client.State]{value: state, err: err}
|
||||||
})
|
})
|
||||||
got := waitResult(t, loadDone)
|
got := waitResult(t, loadDone)
|
||||||
@@ -68,7 +68,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
|
|||||||
wantOrder := sampleOrder()
|
wantOrder := sampleOrder()
|
||||||
|
|
||||||
saveReportDone := make(chan error, 1)
|
saveReportDone := make(chan error, 1)
|
||||||
s.SaveReport(id, turn, initialReport, func(err error) {
|
s.SaveReportAsync(id, turn, initialReport, func(err error) {
|
||||||
saveReportDone <- err
|
saveReportDone <- err
|
||||||
})
|
})
|
||||||
if err := waitError(t, saveReportDone); err != nil {
|
if err := waitError(t, saveReportDone); err != nil {
|
||||||
@@ -76,7 +76,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
saveOrderDone := make(chan error, 1)
|
saveOrderDone := make(chan error, 1)
|
||||||
s.SaveOrder(id, turn, wantOrder, func(err error) {
|
s.SaveOrderAsync(id, turn, wantOrder, func(err error) {
|
||||||
saveOrderDone <- err
|
saveOrderDone <- err
|
||||||
})
|
})
|
||||||
if err := waitError(t, saveOrderDone); err != nil {
|
if err := waitError(t, saveOrderDone); err != nil {
|
||||||
@@ -84,7 +84,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
saveUpdatedReportDone := make(chan error, 1)
|
saveUpdatedReportDone := make(chan error, 1)
|
||||||
s.SaveReport(id, turn, updatedReport, func(err error) {
|
s.SaveReportAsync(id, turn, updatedReport, func(err error) {
|
||||||
saveUpdatedReportDone <- err
|
saveUpdatedReportDone <- err
|
||||||
})
|
})
|
||||||
if err := waitError(t, saveUpdatedReportDone); err != nil {
|
if err := waitError(t, saveUpdatedReportDone); err != nil {
|
||||||
@@ -92,7 +92,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadReportDone := make(chan callbackResult[report.Report], 1)
|
loadReportDone := make(chan callbackResult[report.Report], 1)
|
||||||
s.LoadReport(id, turn, func(rep report.Report, err error) {
|
s.LoadReportAsync(id, turn, func(rep report.Report, err error) {
|
||||||
loadReportDone <- callbackResult[report.Report]{value: rep, err: err}
|
loadReportDone <- callbackResult[report.Report]{value: rep, err: err}
|
||||||
})
|
})
|
||||||
gotReport := waitResult(t, loadReportDone)
|
gotReport := waitResult(t, loadReportDone)
|
||||||
@@ -104,7 +104,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadOrderDone := make(chan callbackResult[order.Order], 1)
|
loadOrderDone := make(chan callbackResult[order.Order], 1)
|
||||||
s.LoadOrder(id, turn, func(got order.Order, err error) {
|
s.LoadOrderAsync(id, turn, func(got order.Order, err error) {
|
||||||
loadOrderDone <- callbackResult[order.Order]{value: got, err: err}
|
loadOrderDone <- callbackResult[order.Order]{value: got, err: err}
|
||||||
})
|
})
|
||||||
gotOrder := waitResult(t, loadOrderDone)
|
gotOrder := waitResult(t, loadOrderDone)
|
||||||
@@ -120,7 +120,7 @@ func TestSaveOrderBeforeReportReturnsNotExist(t *testing.T) {
|
|||||||
s := newTestStorage(t)
|
s := newTestStorage(t)
|
||||||
|
|
||||||
done := make(chan error, 1)
|
done := make(chan error, 1)
|
||||||
s.SaveOrder("game-2", 3, sampleOrder(), func(err error) {
|
s.SaveOrderAsync("game-2", 3, sampleOrder(), func(err error) {
|
||||||
done <- err
|
done <- err
|
||||||
})
|
})
|
||||||
err := waitError(t, done)
|
err := waitError(t, done)
|
||||||
@@ -390,7 +390,7 @@ func TestSaveStateIsNonBlockingAndCallbackBased(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
callbacks := make(chan error, 2)
|
callbacks := make(chan error, 2)
|
||||||
s.SaveState(sampleState(), func(err error) {
|
s.SaveStateAsync(sampleState(), func(err error) {
|
||||||
callbacks <- err
|
callbacks <- err
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+16
-14
@@ -13,40 +13,42 @@ type Storage interface {
|
|||||||
WriteFile(string, []byte) error
|
WriteFile(string, []byte) error
|
||||||
DeleteFile(string) error
|
DeleteFile(string) error
|
||||||
ListFiles() ([]string, error)
|
ListFiles() ([]string, error)
|
||||||
|
|
||||||
|
// StateExistss() (bool, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UIStorage manages Client's data local storing and retrieval.
|
// UIStorage manages Client's data local storing and retrieval.
|
||||||
// It performs all I/O operations asynchronously to avoid UI main thread blocking.
|
// It performs all I/O operations asynchronously to avoid UI main thread blocking.
|
||||||
type UIStorage interface {
|
type UIStorage interface {
|
||||||
// StateExists check asynchronously for previously saved [model.State] exists on the filesystem.
|
// StateExistsAsync check asynchronously for previously saved [model.State] exists on the filesystem.
|
||||||
// Passed callback func will will accept false and non-nil error in case of I/O or decoding errors occuried,
|
// Passed callback func will will accept false and non-nil error in case of I/O or decoding errors occuried,
|
||||||
// otherwise bool parameter will indicate existence of previously stores state
|
// otherwise bool parameter will indicate existence of previously stores state
|
||||||
StateExists(func(bool, error))
|
StateExistsAsync(func(bool, error))
|
||||||
|
|
||||||
// LoadState loads Client's [model.State] from filesystem data asynchronously.
|
// LoadStateAsync loads Client's [model.State] from filesystem data asynchronously.
|
||||||
// Passed callback func will accept non-nil error in case of I/O or decoding errors occuried,
|
// Passed callback func will accept non-nil error in case of I/O or decoding errors occuried,
|
||||||
// otherwise callback func accepts loaded [model.State].
|
// otherwise callback func accepts loaded [model.State].
|
||||||
LoadState(func(client.State, error))
|
LoadStateAsync(func(client.State, error))
|
||||||
|
|
||||||
// SaveState stores Client's state at the filesystem asynchronously.
|
// SaveStateAsync stores Client's state at the filesystem asynchronously.
|
||||||
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
||||||
SaveState(client.State, func(error))
|
SaveStateAsync(client.State, func(error))
|
||||||
|
|
||||||
// LoadReport loads a [report.Report] for a given [model.GameID] and turn number from filesystem asynchronously.
|
// LoadReportAsync loads a [report.Report] for a given [model.GameID] and turn number from filesystem asynchronously.
|
||||||
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
|
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
|
||||||
// otherwise callback func accepts loaded [report.Report].
|
// otherwise callback func accepts loaded [report.Report].
|
||||||
LoadReport(client.GameID, uint, func(report.Report, error))
|
LoadReportAsync(client.GameID, uint, func(report.Report, error))
|
||||||
|
|
||||||
// SaveReport stores given [report.Report] for a given [model.GameID] and turn number at the filesystem asynchronously.
|
// SaveReportAsync stores given [report.Report] for a given [model.GameID] and turn number at the filesystem asynchronously.
|
||||||
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
||||||
SaveReport(client.GameID, uint, report.Report, func(error))
|
SaveReportAsync(client.GameID, uint, report.Report, func(error))
|
||||||
|
|
||||||
// LoadOrder loads a [order.Order] for a given [model.GameID] and turn number from filesystem asynchronously.
|
// LoadOrderAsync loads a [order.Order] for a given [model.GameID] and turn number from filesystem asynchronously.
|
||||||
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
|
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
|
||||||
// otherwise callback func accepts loaded [order.Order].
|
// otherwise callback func accepts loaded [order.Order].
|
||||||
LoadOrder(client.GameID, uint, func(order.Order, error))
|
LoadOrderAsync(client.GameID, uint, func(order.Order, error))
|
||||||
|
|
||||||
// SaveOrder stores given [order.Order] for a given [model.GameID] and turn number at the filesystem asynchronously.
|
// SaveOrderAsync stores given [order.Order] for a given [model.GameID] and turn number at the filesystem asynchronously.
|
||||||
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
|
||||||
SaveOrder(client.GameID, uint, order.Order, func(error))
|
SaveOrderAsync(client.GameID, uint, order.Order, func(error))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user