Files
jx-callback/business/jxstore/event/event_tcp.go
2021-06-28 13:33:19 +08:00

126 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}