| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | package modbusimport (	"context"	"net"	"testing"	"time"	"golib/gnet")func serverTCPModBus(t *testing.T, address string) {	ln, err := net.Listen("tcp", address)	if err != nil {		t.Error(err)		return	}	ln = gnet.NewListener(ln, &gnet.Config{		ReadTimout:  5 * time.Second,		WriteTimout: 2 * time.Second,	})	defer func() {		_ = ln.Close()	}()	for {		conn, err := ln.Accept()		if err != nil {			t.Error("serverTCP: accept close:", err)			return		}		go func(conn net.Conn) {			defer func() {				_ = conn.Close()			}()			for {				b := make([]byte, gnet.MaxBuffSize)				n, err := conn.Read(b)				if err != nil {					t.Log("conn.Read:", err)					return				}				t.Log("conn.Read:", gnet.Bytes(b[:n]).HexTo())				p := []byte("hello,world")				if _, err = conn.Write(p); err != nil {					t.Log("conn.Write:", err)					return				} else {					t.Log("conn.Write:", string(p))				}			}		}(conn)	}}type mswHandler struct {	b []byte}func (m *mswHandler) Create() ([]byte, error) {	return m.b, nil}func TestNewBuffer(t *testing.T) {	address := "127.0.0.1:9876"	go serverTCPModBus(t, address)	conn, err := gnet.DialTCP("tcp", address)	if err != nil {		t.Error(err)		return	}	ctx, cancel := context.WithCancel(context.Background())	ms := NewBuffer(ctx, conn, &mswHandler{b: []byte(time.Now().String())})	go ms.Start()	go func() {		time.Sleep(5 * time.Second)		cancel()	}()	tk := time.NewTimer(1 * time.Second)	for {		select {		case <-tk.C:			b, ok := ms.Get()			if !ok {				t.Log("Get: continue")			} else {				t.Log("client.Read:", string(b))			}			tk.Reset(1 * time.Second)		}	}}
 |