package main import ( "encoding/json" "git.noahlan.cn/noahlan/nnet" "git.noahlan.cn/noahlan/nnet/config" "git.noahlan.cn/noahlan/nnet/conn" "git.noahlan.cn/noahlan/nnet/event" "git.noahlan.cn/noahlan/nnet/packet" protocol_nnet "git.noahlan.cn/noahlan/nnet/protocol/nnet" rt "git.noahlan.cn/noahlan/nnet/router" "git.noahlan.cn/noahlan/ntool/nlog" "git.noahlan.cn/noahlan/ntool/npool" "math" "time" ) var ttt event.OnDisconnectedFn = func(nc *conn.Connection, err error) { nlog.Debugf("ttt %v", err) } func runServer(addr string) { nginOpts := make([]nnet.RunOption, 0) nginOpts = append(nginOpts, nnet.WithPoolCfg(npool.Config{ PoolSize: math.MaxInt32, ExpiryDuration: time.Second, PreAlloc: false, MaxBlockingTasks: 0, Nonblocking: false, DisablePurge: false, })) nginOpts = append(nginOpts, protocol_nnet.WithNNetProtocol(protocol_nnet.Config{ HeartbeatInterval: 0, HandshakeValidator: nil, })...) nginOpts = append(nginOpts, func(ngin *nnet.Engine) { ngin.EventManager().RegisterEvent(event.EvtOnDisconnected, ttt) }) ngin := nnet.NewEngine(config.EngineConf{ TaskTimerPrecision: 0, Mode: "dev", Name: "NL", }, nginOpts...) ngin.AddRoutes(rt.Route{ Matches: protocol_nnet.Match{ Route: "ping", Code: 1, }, Handler: func(conn *conn.Connection, pkg packet.IPacket) { nlog.Info("client ping, server pong -> ") err := conn.Send(protocol_nnet.Header{ PacketType: protocol_nnet.Data, MessageHeader: protocol_nnet.MessageHeader{ MsgType: protocol_nnet.Request, ID: 1, Route: "pong", }, }, []byte("1")) nlog.Must(err) }, }) defer ngin.Stop() err := ngin.ListenTCP(config.TCPServerConf{ Protocol: "tcp", Addr: addr, }) if err != nil { return } } func runClient(addr string) (*nnet.Engine, *conn.Connection) { chReady := make(chan struct{}) nginOpts := make([]nnet.RunOption, 0) nginOpts = append(nginOpts, nnet.WithPoolCfg(npool.Config{ PoolSize: math.MaxInt32, ExpiryDuration: time.Second, PreAlloc: false, MaxBlockingTasks: 0, Nonblocking: false, DisablePurge: false, })) nginOpts = append(nginOpts, protocol_nnet.WithNNetClientProtocol(func() { chReady <- struct{}{} })...) ngin := nnet.NewEngine(config.EngineConf{ TaskTimerPrecision: 0, Mode: "dev", Name: "NL", }, nginOpts...) ngin.AddRoutes(rt.Route{ Matches: protocol_nnet.Match{ Route: "test.client", Code: 1, }, Handler: func(conn *conn.Connection, pkg packet.IPacket) { nlog.Info("client hahaha") }, }) conn, err := ngin.DialTCP(addr) nlog.Must(err) handshake, err := json.Marshal(&protocol_nnet.HandshakeReq{ Version: "1.0.0", Type: "test", ClientId: "a", ClientSecret: "a", Payload: map[string]string{ "pl": "test-data", }, }) nlog.Must(err) packer := protocol_nnet.NewPacker(protocol_nnet.NewRouteMap()) hsd, err := packer.Pack(protocol_nnet.Header{ PacketType: protocol_nnet.Handshake, MessageHeader: protocol_nnet.MessageHeader{ MsgType: 0, ID: 0, Route: "", }, }, handshake) nlog.Must(err) err = conn.SendBytes(hsd) nlog.Must(err) <-chReady return ngin, conn }