This commit is contained in:
suyl
2021-07-01 14:40:42 +08:00
parent 4dc034cde9
commit 315bad7e0d

View File

@@ -28,6 +28,7 @@ const (
printMsgFail = -1 //打印失败(打印机报出)
printMsgErr = -2 //京西报出
heartErrNormal = "00" //正常
heartErrWithoutPaper = "04" //心跳错,缺纸
heartErrHot = "08" //过热
@@ -96,14 +97,24 @@ var (
}
)
type PrintInfo struct {
C net.Conn
Status int // 2 //在线缺纸 1 //在线 -1 //离线
}
//连接的客户端,吧每个客户端都放进来
type TcpClient struct {
Clients map[string]net.Conn
Clients map[string]*PrintInfo
s *sync.RWMutex
}
type GetPrintStatus struct {
PrintNo string //打印机编号
}
func ListenTcp() {
tcpClient.Clients = make(map[string]net.Conn)
tcpClient.Clients = make(map[string]*PrintInfo)
l, err := net.Listen("tcp", ":8000")
if err != nil {
fmt.Println("listen error:", err)
@@ -141,6 +152,8 @@ func handleConn(c net.Conn) {
}
return
}
//也可能是查状态的
//看是心跳还是打印返回
data := hex.EncodeToString(buffer[:n])
//证明是心跳
@@ -150,10 +163,20 @@ func handleConn(c net.Conn) {
printNo = string(printNoData)
globals.SugarLogger.Debugf("handleConn printno :[%v]", printNo)
if tcpClient.Clients[printNo] == nil {
tcpClient.Clients[printNo] = c
printInfo := &PrintInfo{
C: c,
Status: printStatus2JxStatus(data[len(data)-8 : len(data)-6]),
}
tcpClient.Clients[printNo] = printInfo
} else {
//改变打印机状态
changePrinterStatus(printNo, printerStatusOnline)
//changePrinterStatus(printNo, printerStatusOnline)
if tcpClient.Clients[printNo] != nil {
status := printStatus2JxStatus(data[len(data)-8 : len(data)-6])
if tcpClient.Clients[printNo].Status != status {
tcpClient.Clients[printNo].Status = status
}
}
}
} else if strings.Contains(data, printText) {
globals.SugarLogger.Debugf("handleConn print: %v", data)
@@ -162,6 +185,15 @@ func handleConn(c net.Conn) {
}
}
func printStatus2JxStatus(printStatus string) (status int) {
if printStatus == heartErrWithoutPaper {
return printerStatusOnlineWithoutPaper
} else if printStatus == heartErrNormal {
return printerStatusOnline
}
return status
}
func changePrintMsg(data string) (err error) {
var (
db = dao.GetDB()
@@ -217,11 +249,14 @@ func HandleTcpMessages() {
if printMsg != nil {
if err = checkPrintMsg(printMsg); err == nil {
if tcpClient.Clients[printMsg.PrintNo] != nil {
c = tcpClient.Clients[printMsg.PrintNo]
data, err = buildMsg(printMsg)
} else {
changePrinterStatus(printMsg.PrintNo, printerStatusOffline)
if tcpClient.Clients[printMsg.PrintNo].C != nil {
c = tcpClient.Clients[printMsg.PrintNo].C
data, err = buildMsg(printMsg)
}
}
//else {
// changePrinterStatus(printMsg.PrintNo, printerStatusOffline)
//}
}
} else {
err = fmt.Errorf("未查询到此printMsg")