228 lines
5.7 KiB
Go
228 lines
5.7 KiB
Go
package tcpserver
|
|
|
|
import (
|
|
"DT/model"
|
|
"DT/repository"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"gorm.io/gorm"
|
|
"strconv"
|
|
"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")
|
|
}
|
|
|
|
mod, err := repository.GroupRepositorys.Device.GetDevice(map[string]interface{}{"imei": msg.Imei})
|
|
if err != nil {
|
|
return fmt.Errorf("设备不存在")
|
|
}
|
|
if msg.Pwd != mod.DriverPass {
|
|
return fmt.Errorf("设备密码不正确")
|
|
}
|
|
|
|
mod.DriverVer = msg.Ver
|
|
err = repository.GroupRepositorys.Device.UpdateDevice(mod)
|
|
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")
|
|
}
|
|
|
|
mod, err := repository.GroupRepositorys.DevUpData.GetDevUpData(map[string]interface{}{"imei": client.Imei})
|
|
fmt.Println(mod)
|
|
if err == nil {
|
|
mod.Mile = strconv.Itoa(msg.MessageUpData.Mile)
|
|
mod.Sum = strconv.Itoa(msg.MessageUpData.Sum)
|
|
mod.Time = strconv.Itoa(msg.MessageUpData.Time)
|
|
err = repository.GroupRepositorys.DevUpData.UpdateDevUpData(mod)
|
|
if err != nil {
|
|
return fmt.Errorf("更新设备定时上报信息错误\n")
|
|
}
|
|
} else if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
devUpData := &model.DevUpData{}
|
|
devUpData.Imei = client.Imei
|
|
devUpData.Mile = strconv.Itoa(msg.MessageUpData.Mile)
|
|
devUpData.Sum = strconv.Itoa(msg.MessageUpData.Sum)
|
|
devUpData.Time = strconv.Itoa(msg.MessageUpData.Time)
|
|
err = repository.GroupRepositorys.DevUpData.CreateDevUpData(devUpData)
|
|
if err != nil {
|
|
return fmt.Errorf("设备定时上报存储失败\n")
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
func (s *Server) Db(client *Client, message []byte) error {
|
|
var msg Message
|
|
if err := json.Unmarshal(message, &msg); err != nil {
|
|
return err
|
|
}
|
|
if msg.Type != "db" {
|
|
return fmt.Errorf("unauthorized")
|
|
}
|
|
fmt.Printf("客户端分贝:%v\r\n", msg.MessageDb)
|
|
return nil
|
|
}
|