package main import ( "encoding/json" "git.noahlan.cn/noahlan/nnet/config" "git.noahlan.cn/noahlan/nnet/core" "git.noahlan.cn/noahlan/nnet/entity" "git.noahlan.cn/noahlan/nnet/packet" "git.noahlan.cn/noahlan/nnet/protocol/nnet" "git.noahlan.cn/noahlan/ntools-go/core/nlog" "git.noahlan.cn/noahlan/ntools-go/core/pool" "math" "time" ) func runServer(addr string) { server := core.NewServer(config.EngineConf{ ServerConf: config.ServerConf{ Protocol: "tcp", Addr: addr, Name: "testServer", Mode: "dev", }, Pool: pool.Config{ PoolSize: math.MaxInt32, ExpiryDuration: time.Second, PreAlloc: false, MaxBlockingTasks: 0, Nonblocking: false, DisablePurge: false, }, }, nnet.WithNNetProtocol(nnet.Config{ HeartbeatInterval: 0, HandshakeValidator: nil, })...) server.AddRoutes([]core.Route{ { Matches: nnet.Match{ Route: "ping", Code: 1, }, Handler: func(et entity.NetworkEntity, pkg packet.IPacket) { nlog.Info("client ping, server pong -> ") err := et.Send(nnet.Header{ PacketType: nnet.Data, MessageHeader: nnet.MessageHeader{ MsgType: nnet.Request, ID: 1, Route: "pong", }, }, []byte("1")) nlog.Must(err) }, }, }) defer server.Stop() server.Start() } func runClient(addr string) (client *core.Client, et entity.NetworkEntity) { chReady := make(chan struct{}) client = core.NewClient(config.EngineConf{ Pool: pool.Config{ PoolSize: math.MaxInt32, ExpiryDuration: time.Second, PreAlloc: false, MaxBlockingTasks: 0, Nonblocking: false, DisablePurge: false, }, }, nnet.WithNNetClientProtocol(func() { chReady <- struct{}{} })...) client.AddRoutes([]core.Route{ { Matches: nnet.Match{ Route: "test.client", Code: 1, }, Handler: func(et entity.NetworkEntity, pkg packet.IPacket) { nlog.Info("client hahaha") }, }, }) et = client.Dial(addr) handshake, err := json.Marshal(&nnet.HandshakeReq{ Version: "1.0.0", Type: "test", ClientId: "a", ClientSecret: "a", Payload: map[string]string{ "pl": "test-data", }, }) nlog.Must(err) packer := nnet.NewPacker(nnet.NewRouteMap()) hsd, err := packer.Pack(nnet.Header{ PacketType: nnet.Handshake, MessageHeader: nnet.MessageHeader{ MsgType: 0, ID: 0, Route: "", }, }, handshake) nlog.Must(err) err = et.SendBytes(hsd) nlog.Must(err) <-chReady return }