go-study/zinx/znet/server_test.go
2025-09-14 13:59:56 +08:00

85 lines
1.8 KiB
Go

package znet
import (
"fmt"
"go-study/zinx/ziface"
"net"
"testing"
"time"
)
type PingRouter struct {
BaseRouter
}
func (pr *PingRouter) PreHandle(request ziface.IRequest) {
fmt.Println("Call Router PreHandle")
_, err := request.GetConnection().GetTCPConnection().Write([]byte("before ping...\n"))
if err != nil {
fmt.Println("call back before ping error")
}
}
func (pr *PingRouter) Handle(request ziface.IRequest) {
fmt.Println("Call PingRouter Handle")
_, err := request.GetConnection().GetTCPConnection().Write([]byte("ping...ping...ping\n"))
if err != nil {
fmt.Println("call back ping error")
}
}
func (pr *PingRouter) PostHandle(request ziface.IRequest) {
fmt.Println("Call Router PostHandle")
_, err := request.GetConnection().GetTCPConnection().Write([]byte("after ping...\n"))
if err != nil {
fmt.Println("call back after ping error")
}
}
// ClientTest 模拟客户端
func ClientTest() {
fmt.Println("Client Test... start")
// 3s 之后发起测试请求,给服务器端开启服务的机会
time.Sleep(3 * time.Second)
conn, err := net.Dial("tcp", "127.0.0.1:7777")
if err != nil {
fmt.Println("client dial err:", err)
return
}
for {
_, err := conn.Write([]byte("hello Zinx"))
if err != nil {
fmt.Println("write error:", err)
return
}
buf := make([]byte, 512)
cnt, err := conn.Read(buf)
if err != nil {
fmt.Println("read buf error:", err)
return
}
fmt.Printf("server call back: %s, cnt = %d\n", string(buf[:cnt]), cnt)
time.Sleep(1 * time.Second)
}
}
// TestServer 服务器端测试
func TestServer(t *testing.T) {
// 创建一个 Server 句柄
s := NewServer("[Zinx V0.3]")
// 给当前 Zinx 框架添加一个自定义的 Router
s.AddRouter(&PingRouter{})
// 启动客户端测试
go ClientTest()
// 启动服务器
s.Serve()
}