Enable CLI driver of async session #49
@ -191,7 +191,6 @@ func main() {
|
|||||||
defer stateStore.Close()
|
defer stateStore.Close()
|
||||||
|
|
||||||
rp := &httpserver.DefaultRequestParser{}
|
rp := &httpserver.DefaultRequestParser{}
|
||||||
//sh := httpserver.NewSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl.Init)
|
|
||||||
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
||||||
sh := httpserver.ToSessionHandler(bsh)
|
sh := httpserver.ToSessionHandler(bsh)
|
||||||
s := &http.Server{
|
s := &http.Server{
|
||||||
|
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module git.grassecon.net/urdt/ussd
|
|||||||
go 1.22.6
|
go 1.22.6
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.defalsify.org/vise.git 0d23e0dbb57fe63b6626527fddc86649cfc20f8f
|
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f
|
||||||
github.com/alecthomas/assert/v2 v2.2.2
|
github.com/alecthomas/assert/v2 v2.2.2
|
||||||
gopkg.in/leonelquinteros/gotext.v1 v1.3.1
|
gopkg.in/leonelquinteros/gotext.v1 v1.3.1
|
||||||
)
|
)
|
||||||
|
4
go.sum
4
go.sum
@ -1,5 +1,5 @@
|
|||||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911162138-1f2af8672dc7 h1:embPZDx0Sgpq6jp9vcZ1GVI0eum3PsPCmAfxAa/1KLI=
|
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f h1:CuJvG3NyMoRtHUim4aZdrfjjJBg2AId7z0yp7Q97bRM=
|
||||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911162138-1f2af8672dc7/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
|
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
|
||||||
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
|
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
|
||||||
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
|
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
|
||||||
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
|
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
|
||||||
|
@ -50,7 +50,7 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
|
|||||||
|
|
||||||
rqs.Storage, err = f.provider.Get(rqs.Config.SessionId)
|
rqs.Storage, err = f.provider.Get(rqs.Config.SessionId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logg.ErrorCtxf(rqs.Ctx, "", "storage error", "err", err)
|
logg.ErrorCtxf(rqs.Ctx, "", "storage get error", err)
|
||||||
return rqs, ErrStorage
|
return rqs, ErrStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +58,11 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
|
|||||||
eni := f.GetEngine(rqs.Config, f.rs, rqs.Storage.Persister)
|
eni := f.GetEngine(rqs.Config, f.rs, rqs.Storage.Persister)
|
||||||
en, ok := eni.(*engine.DefaultEngine)
|
en, ok := eni.(*engine.DefaultEngine)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage)
|
||||||
|
rqs.Storage = nil
|
||||||
|
if perr != nil {
|
||||||
|
logg.ErrorCtxf(rqs.Ctx, "", "storage put error", perr)
|
||||||
|
}
|
||||||
return rqs, ErrEngineType
|
return rqs, ErrEngineType
|
||||||
}
|
}
|
||||||
en = en.WithFirst(f.hn.Init)
|
en = en.WithFirst(f.hn.Init)
|
||||||
@ -68,6 +73,11 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
|
|||||||
|
|
||||||
r, err = rqs.Engine.Init(rqs.Ctx)
|
r, err = rqs.Engine.Init(rqs.Ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage)
|
||||||
|
rqs.Storage = nil
|
||||||
|
if perr != nil {
|
||||||
|
logg.ErrorCtxf(rqs.Ctx, "", "storage put error", perr)
|
||||||
|
}
|
||||||
return rqs, err
|
return rqs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,6 +85,11 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
|
|||||||
r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
|
r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage)
|
||||||
|
rqs.Storage = nil
|
||||||
|
if perr != nil {
|
||||||
|
logg.ErrorCtxf(rqs.Ctx, "", "storage put error", perr)
|
||||||
|
}
|
||||||
return rqs, err
|
return rqs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ type RequestSession struct {
|
|||||||
Config engine.Config
|
Config engine.Config
|
||||||
Engine engine.Engine
|
Engine engine.Engine
|
||||||
Input []byte
|
Input []byte
|
||||||
Storage storage.Storage
|
Storage *storage.Storage
|
||||||
Writer io.Writer
|
Writer io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ func(f *SessionHandler) writeError(w http.ResponseWriter, code int, err error) {
|
|||||||
func(f *SessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
func(f *SessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||||
var code int
|
var code int
|
||||||
var err error
|
var err error
|
||||||
|
var perr error
|
||||||
|
|
||||||
rqs := handlers.RequestSession{
|
rqs := handlers.RequestSession{
|
||||||
Ctx: req.Context(),
|
Ctx: req.Context(),
|
||||||
@ -109,14 +110,13 @@ func(f *SessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
w.WriteHeader(200)
|
w.WriteHeader(200)
|
||||||
w.Header().Set("Content-Type", "text/plain")
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
rqs, err = f.Output(rqs)
|
rqs, err = f.Output(rqs)
|
||||||
|
rqs, perr = f.Reset(rqs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
f.writeError(w, 500, err)
|
f.writeError(w, 500, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if perr != nil {
|
||||||
rqs, err = f.Reset(rqs)
|
f.writeError(w, 500, perr)
|
||||||
if err != nil {
|
|
||||||
f.writeError(w, 500, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,31 +11,31 @@ type Storage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type StorageProvider interface {
|
type StorageProvider interface {
|
||||||
Get(sessionId string) (Storage, error)
|
Get(sessionId string) (*Storage, error)
|
||||||
Put(sessionId string, storage Storage) error
|
Put(sessionId string, storage *Storage) error
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
type SimpleStorageProvider struct {
|
type SimpleStorageProvider struct {
|
||||||
Storage
|
*Storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSimpleStorageProvider(stateStore db.Db, userdataStore db.Db) StorageProvider {
|
func NewSimpleStorageProvider(stateStore db.Db, userdataStore db.Db) StorageProvider {
|
||||||
pe := persist.NewPersister(stateStore)
|
pe := persist.NewPersister(stateStore)
|
||||||
pe = pe.WithFlush()
|
pe = pe.WithFlush()
|
||||||
return &SimpleStorageProvider{
|
return &SimpleStorageProvider{
|
||||||
Storage: Storage{
|
Storage: &Storage{
|
||||||
Persister: pe,
|
Persister: pe,
|
||||||
UserdataDb: userdataStore,
|
UserdataDb: userdataStore,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *SimpleStorageProvider) Get(sessionId string) (Storage, error) {
|
func (p *SimpleStorageProvider) Get(sessionId string) (*Storage, error) {
|
||||||
return p.Storage, nil
|
return p.Storage, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *SimpleStorageProvider) Put(sessionId string, storage Storage) error {
|
func (p *SimpleStorageProvider) Put(sessionId string, storage *Storage) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user