diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index 2bec035a0..25da67456 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -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")