message forwarding basically working
This commit is contained in:
parent
5c6a7c76d8
commit
8b0230da3b
4 changed files with 33 additions and 6 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
"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/context"
|
||||||
"git.sr.ht/~cco/go-scopes/lib/message"
|
"git.sr.ht/~cco/go-scopes/lib/message"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ func step(ctx lib.Context, sig <-chan os.Signal) bool {
|
||||||
//ctx.LogInfo("Dispatcher stopped", m.Map{})
|
//ctx.LogInfo("Dispatcher stopped", m.Map{})
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return ctx.HandleMsg(msg)
|
return context.HandleMsg(ctx, msg)
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package action
|
package action
|
||||||
|
|
||||||
import "git.sr.ht/~cco/go-scopes/lib"
|
import (
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib/message"
|
||||||
|
)
|
||||||
|
|
||||||
type baseSpec struct {
|
type baseSpec struct {
|
||||||
handler lib.ActionHandler
|
handler lib.ActionHandler
|
||||||
|
@ -23,11 +26,22 @@ func BaseSpec(hdlr lib.ActionHandler, rcvrs []string) *baseSpec {
|
||||||
|
|
||||||
func Select(ctx lib.Context, msg lib.Message) []lib.Action {
|
func Select(ctx lib.Context, msg lib.Message) []lib.Action {
|
||||||
var acts []lib.Action
|
var acts []lib.Action
|
||||||
// act := action{ctx, spec, msg}
|
for _, ac := range ctx.Config().Actions() {
|
||||||
// acts = append(acts, &act)
|
if match(ac, msg) {
|
||||||
|
for _, spec := range ac.Specs() {
|
||||||
|
act := action{ctx, spec, msg}
|
||||||
|
acts = append(acts, &act)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return acts
|
return acts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func match(ac lib.ActionConfig, msg lib.Message) bool {
|
||||||
|
return ac.Pattern() == msg.Action()
|
||||||
|
//return false
|
||||||
|
}
|
||||||
|
|
||||||
// action
|
// action
|
||||||
|
|
||||||
type action struct {
|
type action struct {
|
||||||
|
@ -55,6 +69,11 @@ func (act *action) Handle() bool {
|
||||||
// predefined action handlers
|
// predefined action handlers
|
||||||
|
|
||||||
func Forward(act lib.Action) bool {
|
func Forward(act lib.Action) bool {
|
||||||
// Send(ctx, addr. msg)
|
ctx := act.Context()
|
||||||
|
msg := act.Message()
|
||||||
|
for _, rcvr := range act.Spec().Receivers() {
|
||||||
|
addr := message.SimpleAddress(rcvr)
|
||||||
|
message.Send(ctx, addr, msg)
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,11 @@ func makeCtx(cfg lib.Config, parent Context) *context {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HandleMsg(ctx lib.Context, msg lib.Message) bool {
|
||||||
|
fmt.Println("context.HandleMsg ", msg)
|
||||||
|
return ctx.Config().MessageHandler()(ctx, msg)
|
||||||
|
}
|
||||||
|
|
||||||
// implement interface context.Context from standard library
|
// implement interface context.Context from standard library
|
||||||
|
|
||||||
func (ctx *context) Deadline() (deadline time.Time, ok bool) {
|
func (ctx *context) Deadline() (deadline time.Time, ok bool) {
|
||||||
|
|
|
@ -14,7 +14,9 @@ func Config() lib.Config {
|
||||||
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),
|
WithAction("demo",
|
||||||
|
action.BaseSpec(action.Forward,
|
||||||
|
[]string{"test-receiver"})).(*config.Base),
|
||||||
Home: ovr(".", HOME),
|
Home: ovr(".", HOME),
|
||||||
AppType: "standard",
|
AppType: "standard",
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue