1
This commit is contained in:
@@ -2,7 +2,6 @@ package event
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -63,6 +62,7 @@ func handleConn(c net.Conn) error {
|
||||
return errors.New("conn is nil")
|
||||
}
|
||||
for {
|
||||
printRemoteAddr := c.RemoteAddr().String()
|
||||
buffer, n, err := ConnRead(c)
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
@@ -70,12 +70,11 @@ func handleConn(c net.Conn) error {
|
||||
} else {
|
||||
fmt.Println("ReadString err:", err)
|
||||
}
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[printRemoteAddr])
|
||||
delete(PrintObject, PrintAddrAndIp[printRemoteAddr])
|
||||
delete(PrintAddrAndIp, printRemoteAddr)
|
||||
return err
|
||||
}
|
||||
globals.SugarLogger.Debugf("======buffer := %s", string(buffer))
|
||||
globals.SugarLogger.Debugf("======n := %d", n)
|
||||
globals.SugarLogger.Debugf("======LocalAddr := %s", c.LocalAddr().String())
|
||||
globals.SugarLogger.Debugf("======RemoteAddr := %s", c.RemoteAddr().String())
|
||||
|
||||
//看是心跳还是打印回调
|
||||
data := hex.EncodeToString(buffer[:n])
|
||||
@@ -93,27 +92,29 @@ func handleConn(c net.Conn) error {
|
||||
callback = true
|
||||
}
|
||||
|
||||
t, ok := PrintObject[printNo]
|
||||
if !ok {
|
||||
t = NewTcpClient()
|
||||
buildAllMap(t, printNo)
|
||||
PrintObject[printNo] = t
|
||||
}
|
||||
if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存
|
||||
param := struct {
|
||||
PrintNoClear json.Number `json:"print_no_clear"`
|
||||
}{}
|
||||
if err := json.Unmarshal(buffer[0:n], ¶m); err != nil {
|
||||
c.Write([]byte(err.Error()))
|
||||
return err
|
||||
}
|
||||
t.buildMsgMap(param.PrintNoClear.String())
|
||||
c.Write([]byte("ok"))
|
||||
return err
|
||||
}
|
||||
t, _ := PrintObject[printNo]
|
||||
//if !ok {
|
||||
// t = NewTcpClient()
|
||||
// buildAllMap(t, printNo)
|
||||
// PrintObject[printNo] = t
|
||||
// PrintAddrAndIp[printRemoteAddr] = printNo
|
||||
// PrintIpAndAddr[printNo] = printRemoteAddr
|
||||
//}
|
||||
//if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存
|
||||
// param := struct {
|
||||
// PrintNoClear json.Number `json:"print_no_clear"`
|
||||
// }{}
|
||||
// if err := json.Unmarshal(buffer[0:n], ¶m); err != nil {
|
||||
// c.Write([]byte(err.Error()))
|
||||
// return err
|
||||
// }
|
||||
// t.buildMsgMap(param.PrintNoClear.String())
|
||||
// c.Write([]byte("ok"))
|
||||
// return err
|
||||
//}
|
||||
if heartbeat {
|
||||
// 证明是心跳
|
||||
Heartbeat(c, t, data, printNo)
|
||||
Heartbeat(c, t, data, printNo, printRemoteAddr)
|
||||
} else if callback {
|
||||
// 打印回调
|
||||
Callback(c, t, data, printNo)
|
||||
@@ -182,7 +183,7 @@ func HandleTcpMessages(t *TcpClient, printNo string) {
|
||||
timeNow := time.Now()
|
||||
timeStart := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location())
|
||||
timeEnd := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 23, 59, 59, 0, timeNow.Location())
|
||||
prints, _ := dao.GetPrintMsgs(db, printNo, []int{printMsgWait}, timeStart.AddDate(0, 0, -1), timeEnd, offset, pageSize)
|
||||
prints, _ := dao.GetPrintMsgs(db, printNo, []int{PrintMsgWait}, timeStart.AddDate(0, 0, -1), timeEnd, offset, pageSize)
|
||||
for _, printMsg := range prints {
|
||||
printMsg.Status = PrintMsgAlreadyLoad
|
||||
//先避免重复读再插到channel?
|
||||
@@ -251,6 +252,9 @@ func doPrint(t *TcpClient, key string) (err error) {
|
||||
}
|
||||
|
||||
if c == nil {
|
||||
printRemoteAddrIP := PrintIpAndAddr[key]
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
||||
delete(PrintObject, key)
|
||||
return
|
||||
}
|
||||
@@ -259,14 +263,19 @@ func doPrint(t *TcpClient, key string) (err error) {
|
||||
printMsg.Status = printMsgErr
|
||||
printMsg.Comment = err.Error()
|
||||
dao.UpdateEntity(db, printMsg, "Status", "Comment")
|
||||
|
||||
printRemoteAddrIP := PrintIpAndAddr[key]
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
||||
delete(PrintObject, key)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = c.Write(data); err != nil {
|
||||
globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err)
|
||||
//close(t.TimeoutMap[key])
|
||||
//delete(t.TimeoutMap, key)
|
||||
printRemoteAddrIP := PrintIpAndAddr[key]
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
||||
delete(PrintObject, key)
|
||||
} else {
|
||||
//等待回调
|
||||
@@ -423,6 +432,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
|
||||
if time.Now().Sub(statusTime) > time.Second*75 {
|
||||
globals.SugarLogger.Debugf("超过一分十秒没有心跳的打印机[%s],当前心跳时间: %s ,上一次心跳时间 : %s", key, utils.Time2TimeStr(time.Now()), utils.Time2TimeStr(statusTime))
|
||||
changePrinterStatus(key, printerStatusOffline)
|
||||
|
||||
// 链接出错,彻底删除换成
|
||||
printRemoteAddrIP := PrintIpAndAddr[key]
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
||||
delete(PrintObject, key)
|
||||
}
|
||||
}
|
||||
@@ -431,6 +445,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
|
||||
close(t.MsgMap[key])
|
||||
close(t.CallBackMap[key])
|
||||
t.delConn(key)
|
||||
|
||||
// 链接出错,彻底删除换成
|
||||
printRemoteAddrIP := PrintIpAndAddr[key]
|
||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
||||
delete(PrintObject, key)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user