From e092178d32ceaf98238c1b3d1042f553fc55d251 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Fri, 30 Jul 2021 10:49:44 +0800 Subject: [PATCH] aa --- business/jxstore/event/event_tcp.go | 28 +++++++++-------------- business/jxstore/event/event_tcp_utils.go | 11 +++++---- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index 085b75bc8..c142fbef3 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -25,7 +25,6 @@ func ListenTcp() { } globals.SugarLogger.Debugf("begin listenTcp port 8000......") go HandleTcpMessages() - go t.HandleCallback() go t.HandleCheckTcpHeart() go t.doPrint2(printMsgChan) //go t.doPrint(printMsgChanFail) @@ -118,9 +117,9 @@ func (t *TcpClient) handleConn(c net.Conn) { } else if strings.Contains(data, printText) { globals.SugarLogger.Debugf("handleConn print callback: %v", data) _, printNo = getCallbackMsgInfo(data) - if backChan, ok := t.CallBackMap.Load(printNo); ok { - backChan.(chan string) <- data - } + t.RLock() + t.CallBackMap[printNo] <- data + t.RUnlock() //printMsgCallbackChan <- printMsgCallbackMap //changePrintMsg(data) } @@ -298,8 +297,14 @@ func (t *TcpClient) doPrint2(printMsgChan chan *model.PrintMsg) (err error) { globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) //printMsg.Status = printMsgAlreadySend //dao.UpdateEntity(db, printMsg, "Status") - //if t.CallBackMap[printMsg.PrintNo] != nil { - //} + if t.CallBackMap[printMsg.PrintNo] != nil { + select { + case dataStr := <-t.CallBackMap[printMsg.PrintNo]: + a, b := getCallbackMsgInfo(dataStr) + t.changePrintMsg(dataStr, a, b) + case <-timeoutChan: + } + } //dataStr := <-printMsgCallbackChan } } @@ -309,17 +314,6 @@ func (t *TcpClient) doPrint2(printMsgChan chan *model.PrintMsg) (err error) { return err } -func (t *TcpClient) HandleCallback() { - for { - t.CallBackMap.Range(func(key, value interface{}) bool { - dataStr := <-value.(chan string) - a, b := getCallbackMsgInfo(dataStr) - t.changePrintMsg(dataStr, a, b) - return true - }) - } -} - func (t *TcpClient) HandleCheckTcpHeart() { for { keys := []string{} diff --git a/business/jxstore/event/event_tcp_utils.go b/business/jxstore/event/event_tcp_utils.go index a840ff6b1..a8634b04f 100644 --- a/business/jxstore/event/event_tcp_utils.go +++ b/business/jxstore/event/event_tcp_utils.go @@ -114,7 +114,7 @@ type PrintInfo struct { //连接的客户端,吧每个客户端都放进来 type TcpClient struct { Clients map[string]*PrintInfo - CallBackMap sync.Map + CallBackMap map[string]chan string *sync.RWMutex } @@ -145,8 +145,11 @@ func (t *TcpClient) addConn(c net.Conn, key string, status int) { } func (t *TcpClient) buildCallBackMap(key string) { + t.Lock() + defer t.Unlock() dataChan := make(chan string, 1024) - t.CallBackMap.Store(key, dataChan) + t.CallBackMap[key] = dataChan + timeoutChan <- 1 } func (t *TcpClient) getPrintStatus(key string) int { @@ -192,8 +195,8 @@ func (t *TcpClient) setPrintStatus(key string, status int) { func NewTcpClient() *TcpClient { t := &TcpClient{ - Clients: make(map[string]*PrintInfo), - //CallBackMap: new(sync.Map), + Clients: make(map[string]*PrintInfo), + CallBackMap: make(map[string]chan string), } t.RWMutex = new(sync.RWMutex) return t