126 lines
2.3 KiB
Go
126 lines
2.3 KiB
Go
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
|
||
}
|