You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/noahlann/nnet/pkg/nnet"
|
|
)
|
|
|
|
// This example demonstrates using a frame-data matcher to route JSON payloads.
|
|
// Try:
|
|
//
|
|
// printf '{"op":"ping"}\n' | nc localhost 8081
|
|
// printf '{"op":"echo","msg":"hello"}\n' | nc localhost 8081
|
|
func main() {
|
|
cfg := &nnet.Config{
|
|
Addr: "tcp://:8081",
|
|
Codec: &nnet.CodecConfig{
|
|
DefaultCodec: "json",
|
|
EnableProtocolEncode: false,
|
|
},
|
|
}
|
|
|
|
srv, err := nnet.NewServer(cfg)
|
|
if err != nil {
|
|
log.Fatal("create server:", err)
|
|
}
|
|
|
|
// Route 1: op == "ping"
|
|
srv.Router().RegisterFrameData("op", "==", "ping", func(ctx nnet.Context) error {
|
|
return ctx.Response().Write(map[string]any{"pong": true})
|
|
})
|
|
|
|
// Route 2: op == "echo"
|
|
srv.Router().RegisterFrameData("op", "==", "echo", func(ctx nnet.Context) error {
|
|
// Echo back raw request
|
|
return ctx.Response().Write(map[string]any{"echo": string(ctx.Request().Raw())})
|
|
})
|
|
|
|
log.Println("router_frame_data listening on :8081 (JSON)")
|
|
if err := srv.Start(); err != nil {
|
|
log.Fatal("start server:", err)
|
|
}
|
|
defer srv.Stop()
|
|
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
<-quit
|
|
}
|