[client:client] Created client initialisation with Update() that stores/fetches data using {client:config} system
This commit is contained in:
parent
775eb33435
commit
9785e8e573
|
@ -0,0 +1,146 @@
|
||||||
|
package client;
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.xdrm.io/schastsp/context"
|
||||||
|
"git.xdrm.io/schastsp/client/keyset"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) Structure
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
type T struct {
|
||||||
|
ctx *context.T // shared context
|
||||||
|
key *keyset.T; // current key
|
||||||
|
sync *keyset.T; // next bufferised key
|
||||||
|
consumed bool; // true if 'key' must be renewed (with 'sync')
|
||||||
|
fkey *config // key file management
|
||||||
|
fsync *config // sync file management
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Constructor
|
||||||
|
*
|
||||||
|
* @ctx<context.T> Shared context
|
||||||
|
* @saveDir<string> Configuration path
|
||||||
|
*
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
func New(ctx *context.T, saveDir string) (*T, error) {
|
||||||
|
|
||||||
|
var err error;
|
||||||
|
|
||||||
|
inst := new(T);
|
||||||
|
|
||||||
|
/* (1) Store context */
|
||||||
|
inst.ctx = ctx;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Get file management for KEY */
|
||||||
|
inst.fkey, err = Config(saveDir, "key");
|
||||||
|
if err != nil { return nil, err }
|
||||||
|
|
||||||
|
/* (3) Get file management for SYNC */
|
||||||
|
inst.fsync, err = Config(saveDir, "sync");
|
||||||
|
if err != nil { return nil, err }
|
||||||
|
|
||||||
|
/* (4) Init KEY */
|
||||||
|
inst.key = nil
|
||||||
|
|
||||||
|
/* (5) Init SYNC */
|
||||||
|
inst.sync = nil
|
||||||
|
|
||||||
|
/* (6) Restore from config */
|
||||||
|
inst.Update();
|
||||||
|
|
||||||
|
return inst, nil;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) Updates 'key' and 'sync' with files (reads or write)
|
||||||
|
*
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
func (c T) Update(){
|
||||||
|
|
||||||
|
/* (1) Restore (both are NIL)
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if c.key == nil && c.sync == nil {
|
||||||
|
|
||||||
|
/* (1) Fetch key */
|
||||||
|
keyReader := c.fkey.Reader();
|
||||||
|
|
||||||
|
if keyReader != nil {
|
||||||
|
|
||||||
|
defer keyReader.Close();
|
||||||
|
|
||||||
|
c.key, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
c.key.Fetch(keyReader);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (2) Fetch sync */
|
||||||
|
syncReader := c.fsync.Reader();
|
||||||
|
|
||||||
|
if syncReader != nil {
|
||||||
|
|
||||||
|
defer syncReader.Close();
|
||||||
|
|
||||||
|
c.sync, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
c.sync.Fetch(syncReader);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (3) Exit if no error */
|
||||||
|
if c.key != nil && c.sync != nil {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Manage if no config
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if c.key == nil{
|
||||||
|
c.key, _ = keyset.Create(c.ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.sync == nil{
|
||||||
|
c.sync, _ = keyset.Create(c.ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) Store current value
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) Store key */
|
||||||
|
c.key, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
keyWriter := c.fkey.Writer();
|
||||||
|
|
||||||
|
if keyWriter != nil {
|
||||||
|
|
||||||
|
defer keyWriter.Close();
|
||||||
|
|
||||||
|
c.key, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
c.key.Store(keyWriter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (2) Store sync */
|
||||||
|
c.sync, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
syncWriter := c.fsync.Writer();
|
||||||
|
|
||||||
|
if syncWriter != nil {
|
||||||
|
|
||||||
|
defer syncWriter.Close();
|
||||||
|
|
||||||
|
c.sync, _ = keyset.Create(c.ctx);
|
||||||
|
|
||||||
|
c.sync.Store(syncWriter);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue