fix: 优化 uds 客户端无法正常接收数据包的问题

This commit is contained in:
kercylan98 2023-08-22 15:34:10 +08:00
parent 3de1f6b9d3
commit 6792e227c0
3 changed files with 42 additions and 4 deletions

View File

@ -1,7 +1,6 @@
package client package client
import ( import (
"bufio"
"github.com/kercylan98/minotaur/server" "github.com/kercylan98/minotaur/server"
"github.com/kercylan98/minotaur/utils/concurrent" "github.com/kercylan98/minotaur/utils/concurrent"
"net" "net"
@ -51,13 +50,13 @@ func (slf *UnixDomainSocket) Run() error {
} }
}() }()
slf.OnUDSConnectionOpenedEvent(slf) slf.OnUDSConnectionOpenedEvent(slf)
packet := make([]byte, 1024)
for slf.packetPool != nil { for slf.packetPool != nil {
reader := bufio.NewReader(slf.conn) n, readErr := slf.conn.Read(packet)
packet, readErr := reader.ReadBytes('\n')
if readErr != nil { if readErr != nil {
panic(readErr) panic(readErr)
} }
slf.OnUDSConnectionReceivePacketEvent(slf, server.NewPacket(packet)) slf.OnUDSConnectionReceivePacketEvent(slf, server.NewPacket(packet[:n]))
} }
}() }()
return nil return nil

39
server/client/uds_test.go Normal file
View File

@ -0,0 +1,39 @@
package client_test
import (
"github.com/kercylan98/minotaur/server"
"github.com/kercylan98/minotaur/server/client"
"testing"
"time"
)
func TestUnixDomainSocket_Write(t *testing.T) {
var close = make(chan struct{})
srv := server.New(server.NetworkUnix)
srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet server.Packet) {
t.Log(packet)
conn.Write(packet)
})
srv.RegStartFinishEvent(func(srv *server.Server) {
time.Sleep(time.Second)
cli := client.NewUnixDomainSocket("./test.sock")
cli.RegUDSConnectionOpenedEvent(func(conn *client.UnixDomainSocket) {
conn.Write(server.NewPacketString("Hello~"))
})
cli.RegUDSConnectionReceivePacketEvent(func(conn *client.UnixDomainSocket, packet server.Packet) {
t.Log(packet)
close <- struct{}{}
})
if err := cli.Run(); err != nil {
panic(err)
}
})
go func() {
if err := srv.Run("./test.sock"); err != nil {
panic(err)
}
}()
<-close
srv.Shutdown()
}