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

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
}