138 lines
2.4 KiB
Go
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
|
|
}
|