feat: client 包增加 tcp 客户端
This commit is contained in:
parent
124635c72c
commit
a3bb10012e
|
@ -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])
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -17,21 +17,11 @@ type UnixDomainSocket struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *UnixDomainSocket) Run(runState chan<- error, receive func(wst int, packet []byte)) {
|
func (slf *UnixDomainSocket) Run(runState chan<- error, receive func(wst int, packet []byte)) {
|
||||||
c, err := net.Dial("unix", slf.addr)
|
dial("unix", slf.addr, runState, receive, func(conn net.Conn) {
|
||||||
if err != nil {
|
slf.conn = conn
|
||||||
runState <- err
|
}, func() bool {
|
||||||
return
|
return slf.closed
|
||||||
}
|
})
|
||||||
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])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *UnixDomainSocket) Write(packet *Packet) error {
|
func (slf *UnixDomainSocket) Write(packet *Packet) error {
|
||||||
|
|
Loading…
Reference in New Issue