Files
jx-callback/business/jxstore/event/event_tcp.go
suyl 30f92b5384 aa
2021-06-28 14:28:04 +08:00

138 lines
2.4 KiB
Go

package event
import (
"encoding/hex"
"fmt"
"git.rosy.net.cn/jx-callback/globals"
"io"
"net"
"strconv"
"strings"
"sync"
)
const (
heartText = "1e000f02000151"
printText = "1e00180200"
printSuccessText = "1e001802000150"
)
var (
//广播频道(通道)
msgChan = make(chan string)
tcpClient = &TcpClient{}
)
//连接的客户端,吧每个客户端都放进来
type TcpClient struct {
Clients map[string]net.Conn
s *sync.RWMutex
}
func Init() {
listenTcp()
go handleTcpMessages()
}
func listenTcp() {
tcpClient.Clients = make(map[string]net.Conn)
l, err := net.Listen("tcp", ":8000")
if err != nil {
fmt.Println("listen error:", err)
return
}
for {
c, err := l.Accept()
if err != nil {
fmt.Println("accept error:", err)
break
}
go handleConn(c)
}
}
func handleConn(c net.Conn) {
var (
printNo string //打印机编号
)
if c == nil {
globals.SugarLogger.Debugf("conn is nil")
return
}
defer c.Close()
buffer := make([]byte, 1024)
for {
n, err := c.Read(buffer)
if err != nil {
if err == io.EOF {
fmt.Println("connection close")
} else {
fmt.Println("ReadString err", err)
}
return
}
//看是心跳还是打印返回
data := hex.EncodeToString(buffer[:n])
//证明是心跳
if strings.Contains(data, heartText) {
printNo = data[len(heartText) : len(data)-8]
if tcpClient.Clients[printNo] == nil {
tcpClient.Clients[printNo] = c
} else {
//改变打印机状态
}
} else if strings.Contains(data, printText) {
//证明是打印成功
if strings.Contains(data, printSuccessText) {
} else {
}
}
}
}
func handleTcpMessages() {
for {
//读取通道中的消息
//msg := <-msgChan
}
}
func Hextob(str string) []byte {
slen := len(str)
bHex := make([]byte, len(str)/2)
ii := 0
for i := 0; i < len(str); i = i + 2 {
if slen != 1 {
ss := string(str[i]) + string(str[i+1])
bt, _ := strconv.ParseInt(ss, 16, 32)
bHex[ii] = byte(bt)
ii = ii + 1
slen = slen - 2
}
}
return bHex
}
func int2h8l8(i int64) (h, l string) {
origin2 := fmt.Sprintf("%b", i)
flag := 16 - len(origin2)
for i := 0; i < flag; i++ {
origin2 = "0" + origin2
}
begin8 := origin2[:8]
end8 := origin2[8:]
r1, _ := strconv.ParseInt(begin8, 2, 32)
r2, _ := strconv.ParseInt(end8, 2, 32)
h = fmt.Sprintf("%x", r1)
l = fmt.Sprintf("%x", r2)
if len(h) < 2 {
h = "0" + h
}
if len(l) < 2 {
l = "0" + l
}
return h, l
}