新增协议

This commit is contained in:
2025-01-02 09:32:39 +08:00
parent 792679098c
commit 27c08f735c
5 changed files with 309 additions and 133 deletions

189
tcpserver/func.go Normal file
View File

@@ -0,0 +1,189 @@
package tcpserver
import (
"DT/repository"
"encoding/json"
"fmt"
"time"
)
func (s *Server) HandleHeartbeat(client *Client, message []byte) error {
if !client.IsAuth {
return fmt.Errorf("unauthorized")
}
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type == "ping" {
client.LastPing = time.Now()
//response := Message{
// MessageType: MessageType{Type: "pong"},
//}
response := struct {
Type string `json:"Type"`
}{
Type: "pong",
}
responseData, err := json.Marshal(response)
if err != nil {
return err
}
_, err = client.Conn.Write(append(responseData, '\r', '\n'))
return err
}
return nil
}
func (s *Server) HandleAuth(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "reg" {
return fmt.Errorf("unauthorized")
}
model, err := repository.GroupRepositorys.Device.GetDevice(map[string]interface{}{"imei": msg.Imei})
if err != nil {
return fmt.Errorf("设备不存在")
}
if msg.Pwd != model.DriverPass {
return fmt.Errorf("设备密码不正确")
}
model.DriverVer = msg.Ver
err = repository.GroupRepositorys.Device.UpdateDevice(model)
if err != nil {
return fmt.Errorf("更新设备版本号失败")
}
if client.authTimer != nil {
client.authTimer.Stop()
client.authTimer = nil
}
client.Imei = msg.Imei
client.IsAuth = true
//response := Message{
// MessageType: MessageType{Type: "reg"},
// MessageTime: MessageTime{Time: time.Now().Unix()},
//}
response := struct {
Type string `json:"Type"`
Time int64 `json:"Time,omitempty"`
}{
Type: "reg",
Time: time.Now().Unix(),
}
responseData, err := json.Marshal(response)
if err != nil {
return err
}
_, err = client.Conn.Write(append(responseData, '\r', '\n'))
return err
}
func (s *Server) HandleOta(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "ota" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备升级结果:%s\r\n", msg.State)
return nil
}
func (s *Server) RealTimeReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "start" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备实时上报数据:%v\r\n", msg.MessageStartData.StartDatas)
return nil
}
func (s *Server) StopRealTimeReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "stop" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备停止实时上报数据:%s\r\n", msg.State)
return nil
}
func (s *Server) TimingReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "up" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备定时上报数据:%v\r\n", msg.MessageUpData)
return nil
}
func (s *Server) SetConfig(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "SetConfig" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备楼层设置结果:%v\r\n", msg.State)
return nil
}
func (s *Server) GetConfig(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "GetConfig" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("获取设备楼层设置:%v\r\n", msg.MessageConf)
return nil
}
func (s *Server) Mp3(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "mp3c" && msg.Type != "mp3b" && msg.Type != "mp3a" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("客户端设置语音状态:%v\r\n", msg.State)
return nil
}
func (s *Server) SetVoiceConf(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "SetVoiceConf" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("客户端语音配置状态:%v\r\n", msg.State)
return nil
}
func (s *Server) GetVoiceConf(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "SetVoiceConf" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("客户端语音配置状态:%v\r\n", msg.MessageVoiceConf)
return nil
}

View File

@@ -1,7 +1,6 @@
package tcpserver
import (
"DT/repository"
"DT/ws"
"bufio"
"bytes"
@@ -9,7 +8,6 @@ import (
"fmt"
"net"
"strings"
"time"
)
type TCPHandler struct {
@@ -107,7 +105,7 @@ func (h *TCPHandler) HandleClient(conn net.Conn) {
return
}
if err := h.Server.RealTimeReporting(client, message); err != nil {
fmt.Printf("OTA 错误: %v\n", err)
fmt.Printf("实时上报错误: %v\n", err)
continue
}
broadcastMessage(message)
@@ -135,7 +133,63 @@ func (h *TCPHandler) HandleClient(conn net.Conn) {
continue
}
broadcastMessage(message)
case "SetConfig":
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
conn.Close()
return
}
if err := h.Server.SetConfig(client, message); err != nil {
fmt.Printf("客户端楼层设置 错误: %v\n", err)
continue
}
broadcastMessage(message)
case "GetConfig":
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
conn.Close()
return
}
if err := h.Server.GetConfig(client, message); err != nil {
fmt.Printf("获取客户端楼层设置错误: %v\n", err)
continue
}
broadcastMessage(message)
case "mp3a", "mp3b", "mp3c":
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
conn.Close()
return
}
if err := h.Server.Mp3(client, message); err != nil {
fmt.Printf("客户端设置语音内容错误: %v\n", err)
continue
}
broadcastMessage(message)
case "SetVoiceConf":
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
conn.Close()
return
}
if err := h.Server.SetVoiceConf(client, message); err != nil {
fmt.Printf("客户端语音配置错误: %v\n", err)
continue
}
broadcastMessage(message)
case "GetVoiceConf":
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
conn.Close()
return
}
if err := h.Server.GetVoiceConf(client, message); err != nil {
fmt.Printf("获取客户端语音配置错误: %v\n", err)
continue
}
broadcastMessage(message)
default:
if !client.IsAuth {
fmt.Printf("来自未授权客户端的消息 %s\n", conn.RemoteAddr())
@@ -146,121 +200,3 @@ func (h *TCPHandler) HandleClient(conn net.Conn) {
}
}
}
func (s *Server) HandleHeartbeat(client *Client, message []byte) error {
if !client.IsAuth {
return fmt.Errorf("unauthorized")
}
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type == "ping" {
client.LastPing = time.Now()
response := Message{
MessageType: MessageType{Type: "pong"},
}
responseData, err := json.Marshal(response)
if err != nil {
return err
}
_, err = client.Conn.Write(append(responseData, '\r', '\n'))
return err
}
return nil
}
func (s *Server) HandleAuth(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "reg" {
return fmt.Errorf("unauthorized")
}
model, err := repository.GroupRepositorys.Device.GetDevice(map[string]interface{}{"imei": msg.Imei})
if err != nil {
return fmt.Errorf("设备不存在")
}
if msg.Pwd != model.DriverPass {
return fmt.Errorf("设备密码不正确")
}
model.DriverVer = msg.Ver
err = repository.GroupRepositorys.Device.UpdateDevice(model)
if err != nil {
return fmt.Errorf("更新设备版本号失败")
}
if client.authTimer != nil {
client.authTimer.Stop()
client.authTimer = nil
}
client.Imei = msg.Imei
client.IsAuth = true
response := Message{
MessageType: MessageType{Type: "reg"},
MessageTime: MessageTime{Time: time.Now().Unix()},
}
responseData, err := json.Marshal(response)
if err != nil {
return err
}
_, err = client.Conn.Write(append(responseData, '\r', '\n'))
return err
}
func (s *Server) HandleOta(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "ota" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备升级结果:%s\r\n", msg.State)
return nil
}
func (s *Server) RealTimeReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "start" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备实时上报数据:%v\r\n", msg)
return nil
}
func (s *Server) StopRealTimeReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "stop" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备停止实时上报数据:%s\r\n", msg.State)
return nil
}
func (s *Server) TimingReporting(client *Client, message []byte) error {
var msg Message
if err := json.Unmarshal(message, &msg); err != nil {
return err
}
if msg.Type != "up" {
return fmt.Errorf("unauthorized")
}
fmt.Printf("设备定时上报数据:%v\r\n", msg.MessageData)
return nil
}

View File

@@ -19,10 +19,32 @@ type MessageState struct {
State string `json:"State,omitempty"`
}
type MessageData struct {
UpDataStruct
//type MessageData struct {
// UpDataStruct
//}
type MessageUpData struct {
Sum int `json:"sum"`
Time int `json:"time"`
Mile int `json:"mile"`
}
type MessageStartData struct {
StartDatas []string `json:"Datas,omitempty"`
}
type MessageConf struct {
Zong string `json:"zong"`
Ceng []string `json:"ceng"`
Height string `json:"height"`
}
type MessageVoiceConf struct {
Fyr string `json:"fyr"`
Yl string `json:"yl"`
Ys string `json:"ys"`
Yd string `json:"yd"`
IsPlay string `json:"isPlay"`
}
type Message struct {
MessageType
MessageImei
@@ -30,11 +52,8 @@ type Message struct {
MessageVer
MessageTime
MessageState
MessageData `json:"Data"`
}
type UpDataStruct struct {
Sum int `json:"sum"`
Time int `json:"time"`
Mile int `json:"mile"`
MessageUpData `json:"Data,omitempty"`
MessageStartData
MessageConf `json:"Conf,omitempty"`
MessageVoiceConf `json:"VoiceConf,omitempty"`
}