From 339829d73f1dfff805fcf9cb9a9a438ca6ccb366 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Mon, 28 Jun 2021 13:33:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=BF=E5=88=B0eventtcp=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/event/event_tcp.go | 125 ++++++++++++++++++++++++++++ main.go | 88 +------------------- 2 files changed, 127 insertions(+), 86 deletions(-) create mode 100644 business/jxstore/event/event_tcp.go diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go new file mode 100644 index 000000000..67227d460 --- /dev/null +++ b/business/jxstore/event/event_tcp.go @@ -0,0 +1,125 @@ +package event + +import ( + "encoding/json" + "fmt" + "git.rosy.net.cn/jx-callback/globals" + "io" + "net" + "strconv" + "sync" +) + +var ( + //广播频道(通道) + msgChan = make(chan string) + tcpClient = &TcpClient{} +) + +type PrintMsg struct { + PrintNo string `json:"print_no"` + Data string `json:"data"` +} + +//连接的客户端,吧每个客户端都放进来 +type TcpClient struct { + Clients map[string][]interface{} + s *sync.RWMutex +} + +func Init() { + listenTcp() + go handleTcpMessages() +} + +func listenTcp() { + tcpClient.Clients = make(map[string][]interface{}) + l, err := net.Listen("tcp", ":8000") + if err != nil { + fmt.Println("listen error:", err) + return + } + for { + c, err := l.Accept() + if err != nil { + fmt.Println("accept error:", err) + break + } + go handleConn(c) + } +} + +func handleConn(c net.Conn) { + var ( + printMsg = &PrintMsg{} + ) + if c == nil { + globals.SugarLogger.Debugf("conn is nil") + return + } + defer c.Close() + buffer := make([]byte, 1024) + for { + n, err := c.Read(buffer) + if err != nil { + if err == io.EOF { + fmt.Println("connection close") + } else { + fmt.Println("ReadString err", err) + } + return + } + //能转说明是打印信息,不能转说明是打印机的心跳或者连接 + if err = json.Unmarshal(buffer[:n], &printMsg); err == nil { + //是打印信息就把信息放进chan里,后续根据信息里的printno寻找客户端连接并打印 + msgChan <- string(buffer[:n]) + } else { + //如果是打印机的心跳或者打印信息返回 + //tcpClient.Clients[] + } + } +} + +func handleTcpMessages() { + for { + //读取通道中的消息 + //msg := <-msgChan + } +} + +func Hextob(str string) []byte { + slen := len(str) + bHex := make([]byte, len(str)/2) + ii := 0 + for i := 0; i < len(str); i = i + 2 { + if slen != 1 { + ss := string(str[i]) + string(str[i+1]) + bt, _ := strconv.ParseInt(ss, 16, 32) + bHex[ii] = byte(bt) + ii = ii + 1 + slen = slen - 2 + } + } + return bHex +} + +func int2h8l8(i int64) (h, l string) { + origin2 := fmt.Sprintf("%b", i) + flag := 16 - len(origin2) + for i := 0; i < flag; i++ { + origin2 = "0" + origin2 + } + begin8 := origin2[:8] + end8 := origin2[8:] + r1, _ := strconv.ParseInt(begin8, 2, 32) + r2, _ := strconv.ParseInt(end8, 2, 32) + h = fmt.Sprintf("%x", r1) + l = fmt.Sprintf("%x", r2) + if len(h) < 2 { + h = "0" + h + } + if len(l) < 2 { + l = "0" + l + } + return h, l +} diff --git a/main.go b/main.go index e7127e63b..6b722f448 100644 --- a/main.go +++ b/main.go @@ -1,15 +1,12 @@ package main import ( - "encoding/hex" "flag" "fmt" - "io" - "net" + "git.rosy.net.cn/jx-callback/business/jxstore/event" "net/http" _ "net/http/pprof" "os" - "strconv" "time" "git.rosy.net.cn/baseapi/platformapi/dingdingapi" @@ -148,89 +145,8 @@ func main() { } }() if globals.IsProductEnv() { - l, err := net.Listen("tcp", ":8000") - if err != nil { - fmt.Println("listen error:", err) - return - } - for { - c, err := l.Accept() - if err != nil { - fmt.Println("accept error:", err) - break - } - go handleConn(c) - } + event.Init() } beego.Run() } } - -func handleConn(c net.Conn) { - if c == nil { - fmt.Println("conn is nil") - return - } - defer c.Close() - //reader := bufio.NewReader(c) - buffer := make([]byte, 1024) - for { - n, err := c.Read(buffer) - //ReadString阻塞,直到读到\n - //msg, err := reader.ReadString('\n') - if err != nil { - if err == io.EOF { - fmt.Println("connection close") - } else { - fmt.Println("ReadString err", err) - } - return - } - fmt.Println("read data:", hex.EncodeToString(buffer[:n])) - //1e00370200ff5000011b401b594155012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dff - //data := []byte{0x1E, 0x00, 0x37, 0x02, 0x00, 0xff, 0x50, 0x00, 0x01, 0x1b, 0x40, 0x1b, 0x59, 0x41, 0x55, 0x01, 0x2d, - // 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - // 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - // 0xff} - data := "1E00C10200FF5000011B401B594155012D202D202D202D202D202D202D202D202D202D202D202D202D2D202D202D200AB2CBC3FB2020202020202020CAFDC1BF2020202020202020BDF0B6EE0AB0D7C7D0BCA620202020202031202020202020202020202031350A2D202D202D202D202D202D202D202D202D202D202D202D202D2D202D202D200A1b61021b2130D7DCBDF0B6EE3A31350A1D58021b5a000106160068747470733a2f2f7777772e62616964752e636f6d2f1b61000A0A0A1B40FF" - c.Write(Hextob(data)) - fmt.Println("write data: ", data) - } -} - -func Hextob(str string) []byte { - slen := len(str) - bHex := make([]byte, len(str)/2) - ii := 0 - for i := 0; i < len(str); i = i + 2 { - if slen != 1 { - ss := string(str[i]) + string(str[i+1]) - bt, _ := strconv.ParseInt(ss, 16, 32) - bHex[ii] = byte(bt) - ii = ii + 1 - slen = slen - 2 - } - } - return bHex -} - -func int2h8l8(i int64) (h, l string) { - origin2 := fmt.Sprintf("%b", i) - flag := 16 - len(origin2) - for i := 0; i < flag; i++ { - origin2 = "0" + origin2 - } - begin8 := origin2[:8] - end8 := origin2[8:] - r1, _ := strconv.ParseInt(begin8, 2, 32) - r2, _ := strconv.ParseInt(end8, 2, 32) - h = fmt.Sprintf("%x", r1) - l = fmt.Sprintf("%x", r2) - if len(h) < 2 { - h = "0" + h - } - if len(l) < 2 { - l = "0" + l - } - return h, l -}