From a3bb10012ed266b2fd1800154da4dcb960dd558e Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Thu, 24 Aug 2023 12:19:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20client=20=E5=8C=85=E5=A2=9E=E5=8A=A0=20?= =?UTF-8?q?tcp=20=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/client/generic.go | 21 +++++++++++++++++++++ server/client/tcp.go | 36 ++++++++++++++++++++++++++++++++++++ server/client/uds.go | 20 +++++--------------- 3 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 server/client/generic.go create mode 100644 server/client/tcp.go diff --git a/server/client/generic.go b/server/client/generic.go new file mode 100644 index 0000000..84c7245 --- /dev/null +++ b/server/client/generic.go @@ -0,0 +1,21 @@ +package client + +import "net" + +func dial(network string, addr string, runState chan<- error, receive func(wst int, packet []byte), setConn func(conn net.Conn), isClosed func() bool) { + c, err := net.Dial(network, addr) + if err != nil { + runState <- err + return + } + setConn(c) + runState <- nil + packet := make([]byte, 1024) + for !isClosed() { + n, readErr := c.Read(packet) + if readErr != nil { + panic(readErr) + } + receive(0, packet[:n]) + } +} diff --git a/server/client/tcp.go b/server/client/tcp.go new file mode 100644 index 0000000..9c4198a --- /dev/null +++ b/server/client/tcp.go @@ -0,0 +1,36 @@ +package client + +import "net" + +func NewTCP(addr string) *Client { + return NewClient(&TCP{ + addr: addr, + }) +} + +type TCP struct { + conn net.Conn + addr string + closed bool +} + +func (slf *TCP) Run(runState chan<- error, receive func(wst int, packet []byte)) { + dial("tcp", slf.addr, runState, receive, func(conn net.Conn) { + slf.conn = conn + }, func() bool { + return slf.closed + }) +} + +func (slf *TCP) Write(packet *Packet) error { + _, err := slf.conn.Write(packet.data) + return err +} + +func (slf *TCP) Close() { + slf.closed = true +} + +func (slf *TCP) GetServerAddr() string { + return slf.addr +} diff --git a/server/client/uds.go b/server/client/uds.go index d2a0bcf..727fed9 100644 --- a/server/client/uds.go +++ b/server/client/uds.go @@ -17,21 +17,11 @@ type UnixDomainSocket struct { } func (slf *UnixDomainSocket) Run(runState chan<- error, receive func(wst int, packet []byte)) { - c, err := net.Dial("unix", slf.addr) - if err != nil { - runState <- err - return - } - slf.conn = c - runState <- nil - packet := make([]byte, 1024) - for !slf.closed { - n, readErr := slf.conn.Read(packet) - if readErr != nil { - panic(readErr) - } - receive(0, packet[:n]) - } + dial("unix", slf.addr, runState, receive, func(conn net.Conn) { + slf.conn = conn + }, func() bool { + return slf.closed + }) } func (slf *UnixDomainSocket) Write(packet *Packet) error {