work in progress: set up standard (core) processing chain (Step, HandleMessage, ...)
This commit is contained in:
parent
c182385353
commit
22e8759369
6 changed files with 84 additions and 7 deletions
|
@ -20,6 +20,8 @@ func Start(ctx lib.Context) {
|
||||||
type Base struct {
|
type Base struct {
|
||||||
name string
|
name string
|
||||||
starter lib.StartProc
|
starter lib.StartProc
|
||||||
|
step lib.StepProc
|
||||||
|
msgHandler lib.MessageHandler
|
||||||
actions []lib.ActionConfig
|
actions []lib.ActionConfig
|
||||||
children []lib.Config
|
children []lib.Config
|
||||||
}
|
}
|
||||||
|
@ -32,6 +34,19 @@ func (cfg *Base) Starter() lib.StartProc {
|
||||||
return cfg.starter
|
return cfg.starter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cfg *Base) Step() lib.StepProc {
|
||||||
|
return cfg.step
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg *Base) MessageHandler() lib.MessageHandler {
|
||||||
|
return cfg.msgHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg *Base) WithMessageHandler(hdlr lib.MessageHandler) *Base {
|
||||||
|
cfg.msgHandler = hdlr
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
func (cfg *Base) Actions() []lib.ActionConfig {
|
func (cfg *Base) Actions() []lib.ActionConfig {
|
||||||
return cfg.actions
|
return cfg.actions
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,12 @@ func (ctx *context) Mailbox() chan lib.Message {
|
||||||
return ctx.mailbox
|
return ctx.mailbox
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *context) Send(rcvr lib.Address, msg lib.Message) {
|
||||||
|
if srv, ok := ctx.Services()[rcvr.Service()]; ok {
|
||||||
|
srv.Mailbox() <- msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (ctx *context) HandleMsg(msg lib.Message) bool {
|
func (ctx *context) HandleMsg(msg lib.Message) bool {
|
||||||
fmt.Println("HandleMsg ", msg)
|
fmt.Println("HandleMsg ", msg)
|
||||||
// return ctx.Config().MessageHandler()(ctx, msg)
|
// return ctx.Config().MessageHandler()(ctx, msg)
|
||||||
|
|
21
lib/core/core.go
Normal file
21
lib/core/core.go
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package core
|
||||||
|
|
||||||
|
import "git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
|
||||||
|
func Start(ctx lib.Context) {
|
||||||
|
Listen(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Listen(ctx lib.Context) {
|
||||||
|
step := ctx.Config().Step()
|
||||||
|
for step(ctx) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Step(ctx lib.Context) bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func HandleMessage(ctx lib.Context, msg lib.Message) bool {
|
||||||
|
return true
|
||||||
|
}
|
13
lib/lib.go
13
lib/lib.go
|
@ -20,6 +20,8 @@ type ActionConfig interface {
|
||||||
type Config interface {
|
type Config interface {
|
||||||
Name() string
|
Name() string
|
||||||
Starter() StartProc
|
Starter() StartProc
|
||||||
|
Step() StepProc
|
||||||
|
MessageHandler() MessageHandler
|
||||||
Actions() []ActionConfig
|
Actions() []ActionConfig
|
||||||
Children() []Config
|
Children() []Config
|
||||||
Add(Config)
|
Add(Config)
|
||||||
|
@ -38,13 +40,19 @@ type Context interface {
|
||||||
State() ContextState
|
State() ContextState
|
||||||
WithState(ContextState) Context
|
WithState(ContextState) Context
|
||||||
Mailbox() chan Message
|
Mailbox() chan Message
|
||||||
|
Send(Address, Message)
|
||||||
HandleMsg(Message) bool
|
HandleMsg(Message) bool
|
||||||
WaitGroup() *sync.WaitGroup
|
WaitGroup() *sync.WaitGroup
|
||||||
Stop()
|
Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Address interface {
|
||||||
|
Service() string
|
||||||
|
}
|
||||||
|
|
||||||
type Message interface {
|
type Message interface {
|
||||||
Action() string
|
Action() string
|
||||||
|
Sender() Address
|
||||||
}
|
}
|
||||||
|
|
||||||
type Action interface {
|
type Action interface {
|
||||||
|
@ -55,8 +63,9 @@ type Action interface {
|
||||||
|
|
||||||
type Proc = func(Context)
|
type Proc = func(Context)
|
||||||
type StartProc = Proc
|
type StartProc = Proc
|
||||||
type MessageHandler = func(Context, Message)
|
type StepProc = func(Context) bool
|
||||||
type ActionHandler = func(Action)
|
type MessageHandler = func(Context, Message) bool
|
||||||
|
type ActionHandler = func(Action) bool
|
||||||
|
|
||||||
// async Runners
|
// async Runners
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,35 @@
|
||||||
package message
|
package message
|
||||||
|
|
||||||
|
import "git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
|
||||||
|
// Message implementation(s)
|
||||||
|
|
||||||
type strMessage string
|
type strMessage string
|
||||||
|
|
||||||
func (msg strMessage) Action() string {
|
func (msg strMessage) Action() string {
|
||||||
return string(msg)
|
return string(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg strMessage) Sender() lib.Address {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func StrMessage(action string) strMessage {
|
func StrMessage(action string) strMessage {
|
||||||
return strMessage(action)
|
return strMessage(action)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Address implementation
|
||||||
|
|
||||||
|
type address struct {
|
||||||
|
service string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (addr *address) Service() string {
|
||||||
|
return addr.service
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateAddress(srv string) *address {
|
||||||
|
return &address{
|
||||||
|
service: srv,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"git.sr.ht/~cco/go-scopes/app"
|
"git.sr.ht/~cco/go-scopes/app"
|
||||||
"git.sr.ht/~cco/go-scopes/config"
|
"git.sr.ht/~cco/go-scopes/config"
|
||||||
"git.sr.ht/~cco/go-scopes/lib"
|
"git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib/core"
|
||||||
"git.sr.ht/~cco/go-scopes/testing"
|
"git.sr.ht/~cco/go-scopes/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,7 +12,8 @@ func Config() lib.Config {
|
||||||
ovr := Overrides().Use
|
ovr := Overrides().Use
|
||||||
b := config.MakeBase
|
b := config.MakeBase
|
||||||
cfg := app.Cfg{
|
cfg := app.Cfg{
|
||||||
Base: b("testing", testing.Start),
|
Base: b("testing", testing.Start).
|
||||||
|
WithMessageHandler(core.HandleMessage),
|
||||||
Home: ovr(".", HOME),
|
Home: ovr(".", HOME),
|
||||||
AppType: "standard",
|
AppType: "standard",
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue