1
This commit is contained in:
@@ -382,7 +382,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err
|
|||||||
Status: event.PrintMsgWait,
|
Status: event.PrintMsgWait,
|
||||||
}
|
}
|
||||||
|
|
||||||
t, ok := event.PrintObject[printNo]
|
t, ok := event.PrintObject.GetPrintObj(printNo)
|
||||||
if ok {
|
if ok {
|
||||||
t.Lock()
|
t.Lock()
|
||||||
defer t.Unlock()
|
defer t.Unlock()
|
||||||
|
|||||||
@@ -2,12 +2,96 @@ package event
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
var PrintObject = make(map[string]*TcpClient, 100) // 缓存的打印机对象
|
var (
|
||||||
var PrintAddrAndIp = make(map[string]string, 100) // 缓存打印机地址:[ip:printNo] event 文件包,connect只能获取到addr
|
PrintObject *PrintObjectStruct // 缓存的打印机对象
|
||||||
var PrintIpAndAddr = make(map[string]string, 100) // 缓存打印机地址:[printNo:ip] api_controller 只能获取到printNo
|
PrintAddrAndIp *PrintAddrAndIpStruct // 缓存打印机地址:[ip:printNo] event 文件包,connect只能获取到addr
|
||||||
|
PrintIpAndAddr *PrintIpAndAddrStruct // 缓存打印机地址:[printNo:ip] api_controller 只能获取到printNo
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
fmt.Println("初始化打印机对象")
|
fmt.Println("初始化打印机对象")
|
||||||
|
PrintObject = &PrintObjectStruct{
|
||||||
|
PrintObject: make(map[string]*TcpClient),
|
||||||
|
RWMutex: new(sync.RWMutex),
|
||||||
|
}
|
||||||
|
PrintAddrAndIp = &PrintAddrAndIpStruct{
|
||||||
|
PrintObject: make(map[string]string),
|
||||||
|
RWMutex: new(sync.RWMutex),
|
||||||
|
}
|
||||||
|
PrintIpAndAddr = &PrintIpAndAddrStruct{
|
||||||
|
PrintObject: make(map[string]string),
|
||||||
|
RWMutex: new(sync.RWMutex),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type PrintObjectStruct struct {
|
||||||
|
PrintObject map[string]*TcpClient
|
||||||
|
*sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintObjectStruct) GetPrintObj(printNo string) (*TcpClient, bool) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
tcpObj, ok := PrintObject.PrintObject[printNo]
|
||||||
|
return tcpObj, ok
|
||||||
|
}
|
||||||
|
func (p *PrintObjectStruct) SetPrintObj(printNo string, tcpObj *TcpClient) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
PrintObject.PrintObject[printNo] = tcpObj
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintObjectStruct) DelPrintObj(printNo string) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
delete(PrintObject.PrintObject, printNo)
|
||||||
|
}
|
||||||
|
|
||||||
|
type PrintAddrAndIpStruct struct {
|
||||||
|
PrintObject map[string]string
|
||||||
|
*sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintAddrAndIpStruct) GetPrintAddrAndIp(ip string) (string, bool) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
printNo, ok := PrintAddrAndIp.PrintObject[ip]
|
||||||
|
return printNo, ok
|
||||||
|
}
|
||||||
|
func (p *PrintAddrAndIpStruct) SetPrintAddrAndIp(ip string, printNo string) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
PrintAddrAndIp.PrintObject[ip] = printNo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintAddrAndIpStruct) DelPrintAddrAndIp(ip string) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
delete(PrintAddrAndIp.PrintObject, ip)
|
||||||
|
}
|
||||||
|
|
||||||
|
type PrintIpAndAddrStruct struct {
|
||||||
|
PrintObject map[string]string
|
||||||
|
*sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintIpAndAddrStruct) GetPrintIpAndAddr(printNo string) (string, bool) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
tcpObj, ok := PrintIpAndAddr.PrintObject[printNo]
|
||||||
|
return tcpObj, ok
|
||||||
|
}
|
||||||
|
func (p *PrintIpAndAddrStruct) SetPrintIpAndAddr(printNo string, ip string) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
PrintIpAndAddr.PrintObject[printNo] = ip
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrintIpAndAddrStruct) DelPrintIpAndAddr(printNo string) {
|
||||||
|
p.RLock()
|
||||||
|
defer p.RUnlock()
|
||||||
|
delete(PrintIpAndAddr.PrintObject, printNo)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ func handleConn(c net.Conn) error {
|
|||||||
} else {
|
} else {
|
||||||
fmt.Println("ReadString err:", err)
|
fmt.Println("ReadString err:", err)
|
||||||
}
|
}
|
||||||
if printNo, ok := PrintAddrAndIp[printRemoteAddr]; ok {
|
if printNo, ok := PrintAddrAndIp.GetPrintAddrAndIp(printRemoteAddr); ok {
|
||||||
delete(PrintIpAndAddr, printNo)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddr)
|
||||||
delete(PrintObject, printNo)
|
PrintObject.DelPrintObj(printNo)
|
||||||
delete(PrintAddrAndIp, printRemoteAddr)
|
PrintIpAndAddr.DelPrintIpAndAddr(printRemoteAddr)
|
||||||
dao.ExecuteSQL(dao.GetDB(), `UPDATE printer SET status = -1,is_online = -1 WHERE print_no = ? `, []interface{}{printNo}...)
|
dao.ExecuteSQL(dao.GetDB(), `UPDATE printer SET status = -1,is_online = -1 WHERE print_no = ? `, []interface{}{printNo}...)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@@ -96,8 +96,8 @@ func handleConn(c net.Conn) error {
|
|||||||
callback = true
|
callback = true
|
||||||
}
|
}
|
||||||
|
|
||||||
t, ok := PrintObject[printNo]
|
t, ok := PrintObject.GetPrintObj(printNo)
|
||||||
if !ok || t.Clients[printNo] == nil || t.Clients[printNo].StatusTime.Sub(time.Now()).Seconds() >= 120 {
|
if !ok || t.Clients[printNo] == nil || time.Now().Sub(t.Clients[printNo].StatusTime).Seconds() >= 120 {
|
||||||
t = NewTcpClient()
|
t = NewTcpClient()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,10 +241,10 @@ func doPrint(t *TcpClient, key string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c == nil {
|
if c == nil {
|
||||||
if printRemoteAddrIP, have := PrintIpAndAddr[key]; have {
|
if printRemoteAddrIP, have := PrintIpAndAddr.GetPrintIpAndAddr(key); have {
|
||||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
PrintIpAndAddr.DelPrintIpAndAddr(key)
|
||||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddrIP)
|
||||||
delete(PrintObject, key)
|
PrintObject.DelPrintObj(key)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -254,20 +254,20 @@ func doPrint(t *TcpClient, key string) (err error) {
|
|||||||
printMsg.Comment = err.Error()
|
printMsg.Comment = err.Error()
|
||||||
dao.UpdateEntity(db, printMsg, "Status", "Comment")
|
dao.UpdateEntity(db, printMsg, "Status", "Comment")
|
||||||
|
|
||||||
if printRemoteAddrIP, have := PrintIpAndAddr[key]; have {
|
if printRemoteAddrIP, have := PrintIpAndAddr.GetPrintIpAndAddr(key); have {
|
||||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
PrintIpAndAddr.DelPrintIpAndAddr(key)
|
||||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddrIP)
|
||||||
delete(PrintObject, key)
|
PrintObject.DelPrintObj(key)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = c.Write(data); err != nil {
|
if _, err = c.Write(data); err != nil {
|
||||||
globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err)
|
globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err)
|
||||||
if printRemoteAddrIP, have := PrintIpAndAddr[key]; have {
|
if printRemoteAddrIP, have := PrintIpAndAddr.GetPrintIpAndAddr(key); have {
|
||||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
PrintIpAndAddr.DelPrintIpAndAddr(key)
|
||||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddrIP)
|
||||||
delete(PrintObject, key)
|
PrintObject.DelPrintObj(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -427,10 +427,10 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
|
|||||||
changePrinterStatus(key, printerStatusOffline)
|
changePrinterStatus(key, printerStatusOffline)
|
||||||
|
|
||||||
// 链接出错,彻底删除换成
|
// 链接出错,彻底删除换成
|
||||||
if printRemoteAddrIP, have := PrintIpAndAddr[key]; have {
|
if printRemoteAddrIP, have := PrintIpAndAddr.GetPrintIpAndAddr(key); have {
|
||||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
PrintIpAndAddr.DelPrintIpAndAddr(key)
|
||||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddrIP)
|
||||||
delete(PrintObject, key)
|
PrintObject.DelPrintObj(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -442,10 +442,10 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
|
|||||||
t.delConn(key)
|
t.delConn(key)
|
||||||
|
|
||||||
// 链接出错,彻底删除换成
|
// 链接出错,彻底删除换成
|
||||||
if printRemoteAddrIP, have := PrintIpAndAddr[key]; have {
|
if printRemoteAddrIP, have := PrintIpAndAddr.GetPrintIpAndAddr(key); have {
|
||||||
delete(PrintIpAndAddr, PrintAddrAndIp[key])
|
PrintIpAndAddr.DelPrintIpAndAddr(key)
|
||||||
delete(PrintAddrAndIp, printRemoteAddrIP)
|
PrintAddrAndIp.DelPrintAddrAndIp(printRemoteAddrIP)
|
||||||
delete(PrintObject, key)
|
PrintObject.DelPrintObj(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string, printRemot
|
|||||||
//4、读打印channel并打印,并切等待回调channel中的消息
|
//4、读打印channel并打印,并切等待回调channel中的消息
|
||||||
//5、修改数据库中打印机状态(没在连接池中说明是重新连接的)
|
//5、修改数据库中打印机状态(没在连接池中说明是重新连接的)
|
||||||
//6、监听心跳时间,超过1分多钟就clear掉
|
//6、监听心跳时间,超过1分多钟就clear掉
|
||||||
if t.getClients(printNo) == nil || t == nil || t.getPrintStatusTime(printNo).IsZero() || t.Clients[printNo].StatusTime.Sub(time.Now()).Seconds() >= 120 {
|
if t.getClients(printNo) == nil || t == nil || t.getPrintStatusTime(printNo).IsZero() || time.Now().Sub(t.Clients[printNo].StatusTime).Seconds() >= 120 {
|
||||||
addConn(c, t, printNo, status)
|
addConn(c, t, printNo, status)
|
||||||
buildAllMap(t, printNo)
|
buildAllMap(t, printNo)
|
||||||
//t.TimeoutMap[printNo] <- true
|
//t.TimeoutMap[printNo] <- true
|
||||||
@@ -663,9 +663,9 @@ func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string, printRemot
|
|||||||
globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo)
|
globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo)
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintObject[printNo] = t
|
PrintObject.SetPrintObj(printNo, t)
|
||||||
PrintAddrAndIp[printRemoteAddr] = printNo
|
PrintAddrAndIp.SetPrintAddrAndIp(printRemoteAddr, printNo)
|
||||||
PrintIpAndAddr[printNo] = printRemoteAddr
|
PrintIpAndAddr.SetPrintIpAndAddr(printNo, printRemoteAddr)
|
||||||
} else {
|
} else {
|
||||||
//在加到连接池中已经更新了时间,所以放在else里
|
//在加到连接池中已经更新了时间,所以放在else里
|
||||||
t.setPrintStatusTime(printNo)
|
t.setPrintStatusTime(printNo)
|
||||||
|
|||||||
Reference in New Issue
Block a user