server, work in progress: handling of remote (request) messages
This commit is contained in:
parent
7c3c88cfc2
commit
399b3576b0
4 changed files with 21 additions and 23 deletions
|
@ -4,7 +4,6 @@ import (
|
||||||
lib "git.sr.ht/~cco/go-scopes"
|
lib "git.sr.ht/~cco/go-scopes"
|
||||||
"git.sr.ht/~cco/go-scopes/config"
|
"git.sr.ht/~cco/go-scopes/config"
|
||||||
"git.sr.ht/~cco/go-scopes/core"
|
"git.sr.ht/~cco/go-scopes/core"
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Cfg struct {
|
type Cfg struct {
|
||||||
|
@ -21,7 +20,7 @@ func (c *Cfg) AddRoute(path string, spec routeSpec, methods ...string) {
|
||||||
spec: spec,
|
spec: spec,
|
||||||
}
|
}
|
||||||
if methods == nil {
|
if methods == nil {
|
||||||
rcfg.methods = []string{"GET"}
|
rcfg.methods = []string{"GET", "POST"}
|
||||||
}
|
}
|
||||||
c.routes = append(c.routes, rcfg)
|
c.routes = append(c.routes, rcfg)
|
||||||
}
|
}
|
||||||
|
@ -42,12 +41,6 @@ func FileServer(docRoot string) *fsSpec {
|
||||||
return &fsSpec{docRoot}
|
return &fsSpec{docRoot}
|
||||||
}
|
}
|
||||||
|
|
||||||
type rcellSpec struct {
|
func MsgHandler() lib.Config {
|
||||||
lib.Config
|
return config.Base("", core.Start)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RCellHandler() *rcellSpec {
|
|
||||||
return &rcellSpec{config.Base("", core.Start)}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Handler func(lib.Context, *gin.Context)
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
lib "git.sr.ht/~cco/go-scopes"
|
lib "git.sr.ht/~cco/go-scopes"
|
||||||
"git.sr.ht/~cco/go-scopes/core"
|
"git.sr.ht/~cco/go-scopes/core"
|
||||||
|
"git.sr.ht/~cco/go-scopes/core/message"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ type ServerState struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Start(ctx lib.Context) {
|
func Start(ctx lib.Context) {
|
||||||
//gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
lib.GetCfg[*Cfg](ctx).BaseCfg.WithDoneHandler(HandleDone)
|
lib.GetCfg[*Cfg](ctx).BaseCfg.WithDoneHandler(HandleDone)
|
||||||
Serve(ctx)
|
Serve(ctx)
|
||||||
lib.RunCtx(ctx, core.Listen)
|
lib.RunCtx(ctx, core.Listen)
|
||||||
|
@ -49,17 +50,21 @@ func setRoute(ctx lib.Context, rcfg routeCfg, r *gin.Engine) {
|
||||||
switch spec := rcfg.spec.(type) {
|
switch spec := rcfg.spec.(type) {
|
||||||
case *fsSpec:
|
case *fsSpec:
|
||||||
r.Static(rcfg.path, spec.docRoot)
|
r.Static(rcfg.path, spec.docRoot)
|
||||||
case *rcellSpec:
|
case lib.Config:
|
||||||
r.Match(rcfg.methods, rcfg.path, func(c *gin.Context) {
|
r.Match(rcfg.methods, rcfg.path+"/*msg", func(c *gin.Context) {
|
||||||
RCell(ctx, spec, c)
|
handle(ctx, spec, c)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RCell (request / response handler cell) implementation
|
// scopes standard request (= message) handler implementation
|
||||||
|
|
||||||
func RCell(ctx lib.Context, spec *rcellSpec, gc *gin.Context) {
|
func handle(ctx lib.Context, cfg lib.Config, gc *gin.Context) {
|
||||||
msg := gc.Param("msg")
|
head := strings.Split(gc.Param("msg"), "/")[1:]
|
||||||
fmt.Printf("*** RCell called: msg: %s\n", msg)
|
msg := message.New(head...)
|
||||||
|
//fmt.Printf("*** RCell called: msg: %+v, method: %s\n", msg, gc.Request.Method)
|
||||||
|
cctx := ctx.ChildContext(cfg)
|
||||||
|
core.HandleMessage(cctx, msg)
|
||||||
|
// cfg.Starter()(cctx)
|
||||||
gc.String(http.StatusOK, "Hello World")
|
gc.String(http.StatusOK, "Hello World")
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,9 +32,9 @@ func Config() lib.Config {
|
||||||
Port: ovr("8123", SERVER_PORT),
|
Port: ovr("8123", SERVER_PORT),
|
||||||
}
|
}
|
||||||
server_c.AddRoute("/docs", server.FileServer("html"))
|
server_c.AddRoute("/docs", server.FileServer("html"))
|
||||||
server_rc := server.RCellHandler()
|
server_mh := server.MsgHandler()
|
||||||
server_rc.AddAction("demo", action.Base(action.Forward, "test-receiver"))
|
server_mh.AddAction("demo", action.Base(action.Forward, "test-receiver"))
|
||||||
server_c.AddRoute("/api/*msg", server_rc)
|
server_c.AddRoute("/api", server_mh)
|
||||||
|
|
||||||
test_client := &client.Cfg{
|
test_client := &client.Cfg{
|
||||||
BaseCfg: b("test-client", core.Start),
|
BaseCfg: b("test-client", core.Start),
|
||||||
|
|
|
@ -19,7 +19,7 @@ func TestScopesApp(tb *tbase.T) {
|
||||||
t.Run("send", SendTest)
|
t.Run("send", SendTest)
|
||||||
t.Run("client", ClientTest)
|
t.Run("client", ClientTest)
|
||||||
t.TearDownApp("")
|
t.TearDownApp("")
|
||||||
t.AssertEqual(t.LogCheck("", true), 12)
|
t.AssertEqual(t.LogCheck("", true), 16)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppTest(t *testing.T) {
|
func AppTest(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue