server: Sync message processor (work in progress)
This commit is contained in:
parent
ec1ab12cef
commit
049998d5ec
4 changed files with 19 additions and 6 deletions
|
@ -116,11 +116,11 @@ func (pl *payload) FromJson(s string) lib.Payload {
|
|||
return pl
|
||||
}
|
||||
|
||||
func Payload(d interface{}) lib.Payload {
|
||||
func Payload(d lib.Data) lib.Payload {
|
||||
return &payload{d}
|
||||
}
|
||||
|
||||
func PayloadFromJson[T any](s string) lib.Payload {
|
||||
func PayloadFromJson[T lib.Data](s string) lib.Payload {
|
||||
pl := &payload{new(T)}
|
||||
return pl.FromJson(s)
|
||||
}
|
||||
|
|
|
@ -51,7 +51,8 @@ func MsgHandler(pattern string, proc msgProc, rcvs ...string) *mhSpec {
|
|||
if proc == nil {
|
||||
proc = Async
|
||||
}
|
||||
cfg := mhSpec{config.Base("", nil), proc}
|
||||
//cfg := mhSpec{config.Dummy(), proc}
|
||||
cfg := mhSpec{config.Default(""), proc}
|
||||
cfg.AddAction(pattern, action.Base(action.Forward, rcvs...))
|
||||
return &cfg
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package server
|
|||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
lib "git.sr.ht/~cco/go-scopes"
|
||||
"git.sr.ht/~cco/go-scopes/config"
|
||||
|
@ -78,10 +79,21 @@ func Async(ctx lib.Context, msg lib.Message) (int, lib.Data) {
|
|||
return http.StatusOK, lib.Map{"status": "OK"}
|
||||
}
|
||||
|
||||
func Sync(ctx lib.Context, msg lib.Message) (int, lib.Data) {
|
||||
func Sync(timeout int) msgProc {
|
||||
return func(ctx lib.Context, msg lib.Message) (int, lib.Data) {
|
||||
return sync(ctx, msg, timeout)
|
||||
}
|
||||
}
|
||||
|
||||
func sync(ctx lib.Context, msg lib.Message, to int) (int, lib.Data) {
|
||||
timeout := time.Duration(to) * time.Second
|
||||
select {
|
||||
case msg := <-ctx.Mailbox():
|
||||
return http.StatusOK, msg.Payload().Data()
|
||||
case <-time.After(timeout):
|
||||
return http.StatusNoContent, nil
|
||||
case <-ctx.Done():
|
||||
return http.StatusGone, nil
|
||||
}
|
||||
return http.StatusOK, lib.Map{"status": "OK"}
|
||||
return http.StatusNoContent, nil
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ func Config() lib.Config {
|
|||
server_c := b("server", server.Start(
|
||||
(&server.Cfg{Port: ovr("8123", SERVER_PORT)}).
|
||||
AddRoute("/docs", server.FileServer("html")).
|
||||
AddRoute("/api", server.MsgHandler("demo", nil, "test-receiver")),
|
||||
AddRoute("/api", server.MsgHandler("demo", server.Async, "test-receiver")),
|
||||
))
|
||||
|
||||
test_client := &client.Cfg{
|
||||
|
|
Loading…
Add table
Reference in a new issue