client io architecture
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package connector
|
||||
|
||||
import (
|
||||
model "galaxy/model/client"
|
||||
"galaxy/model/report"
|
||||
)
|
||||
|
||||
// Connector is a main interface to provide connectivity with app's server.
|
||||
type Connector interface {
|
||||
UIConnector
|
||||
|
||||
// CheckConnection is called asynchronously every 5 seconds and tests is connection available with a specific backend server endpoint.
|
||||
// There is guaranteed backoff 5s -> 15s -> 30s -> 60s when no connection is available.
|
||||
CheckConnection() bool
|
||||
|
||||
// CheckVersion is called asynchronously every 30 minutes and receives from backend server information about currently available app versions.
|
||||
CheckVersion() ([]VersionInfo, error)
|
||||
|
||||
// DownloadVersion asynchronously retrieves from a specific string URL a binary artifact from backend server.
|
||||
DownloadVersion(string) ([]byte, error)
|
||||
}
|
||||
|
||||
// UIConnector contains only funcs are needed for the client app to be functional.
|
||||
type UIConnector interface {
|
||||
// FetchReport asynchronously requests from backend server a [report.Report] for a given [model.GameID] and turn number.
|
||||
// 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].
|
||||
FetchReport(model.GameID, uint, func(report.Report, error))
|
||||
}
|
||||
|
||||
type VersionInfo struct {
|
||||
OS string `json:"os"` // Operating System name (unix, darwin, windows, etc.)
|
||||
Version string `json:"version"` // Semver format: X.Y.Z
|
||||
URL string `json:"url"` // URL for download artifacto for this version
|
||||
}
|
||||
Reference in New Issue
Block a user