104 lines
1.9 KiB
Go
104 lines
1.9 KiB
Go
package tcppool
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"io"
|
||
"net"
|
||
"quenue/app/utils"
|
||
"quenue/config"
|
||
"sync"
|
||
"sync/atomic"
|
||
"time"
|
||
)
|
||
|
||
var (
|
||
full int32 = 0
|
||
TcpFactory = TcpHelper{Full: &full}
|
||
lockSingle sync.Once
|
||
)
|
||
|
||
type TcpHelper struct {
|
||
client net.Conn
|
||
lastTime int64
|
||
Full *int32
|
||
}
|
||
|
||
func (t *TcpHelper) Init(port string) *TcpHelper {
|
||
lockSingle.Do(func() {
|
||
var conn, err = net.Dial("tcp", "192.168.110.50:"+port)
|
||
if err == nil {
|
||
t.client = conn
|
||
//t.watch(t.client)
|
||
}
|
||
})
|
||
return t
|
||
}
|
||
func (t *TcpHelper) handRead(conn net.Conn) {
|
||
//defer func() {
|
||
// if err := recover(); err != nil {
|
||
// utils.Log(nil, "tcp read err", err)
|
||
// }
|
||
//}()
|
||
for {
|
||
if time.Now().Unix()-t.lastTime > 10 {
|
||
//t.isDie = true
|
||
//t.client.Close()
|
||
//t.client = nil
|
||
//return
|
||
}
|
||
fmt.Println("read")
|
||
reader := bufio.NewReader(conn)
|
||
var buffer [256]byte
|
||
// 持续读取数据
|
||
n, err := reader.Read(buffer[:])
|
||
if err == io.EOF {
|
||
continue
|
||
}
|
||
if err != nil {
|
||
//if t.client != nil {
|
||
// t.client.Close()
|
||
// t.client = nil
|
||
//}
|
||
utils.Log(nil, "Error reading data:", err)
|
||
continue
|
||
|
||
}
|
||
recvStr := string(buffer[:n])
|
||
if recvStr == "1" {
|
||
atomic.AddInt32(t.Full, 1)
|
||
} else if recvStr == "ping" {
|
||
conn.Write([]byte("pong"))
|
||
t.lastTime = time.Now().Unix()
|
||
}
|
||
}
|
||
select {}
|
||
}
|
||
func (t *TcpHelper) SendMsg(msg []byte) error {
|
||
_, err := t.Init(config.GetConf().OrderPort).client.Write(msg)
|
||
|
||
var buffer [256]byte
|
||
// 持续读取数据
|
||
n, err := t.client.Read(buffer[:])
|
||
if err == nil {
|
||
if n > 0 {
|
||
recvStr := string(buffer[:n])
|
||
fmt.Println("结果:recvStr:", recvStr)
|
||
if recvStr == "1" {
|
||
fmt.Println("满了")
|
||
atomic.AddInt32(t.Full, 1)
|
||
} else if recvStr == "2" {
|
||
atomic.AddInt32(t.Full, -1)
|
||
}
|
||
}
|
||
|
||
}
|
||
return err
|
||
}
|
||
func (t *TcpHelper) Close(conn net.Conn) {
|
||
t.client.Close()
|
||
}
|
||
func (t *TcpHelper) watch(conn net.Conn) {
|
||
go t.handRead(conn)
|
||
}
|