123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- package gateway
- import (
- "confrontation-training/constant"
- errors "confrontation-training/err"
- "confrontation-training/global"
- "confrontation-training/models/gateway"
- "encoding/json"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/gorilla/websocket"
- "github.com/r3labs/sse/v2"
- "strings"
- "time"
- )
- func SseScanDevice(paramMap map[string]string, filterType string, c *gin.Context) {
- var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl
- deviceMap := make(map[string]gateway.DeviceScanned)
- if len(paramMap) > 0 {
- for key, value := range paramMap {
- scanUrl += "&" + key + "=" + value
- }
- }
- fmt.Println("创建新的sse")
-
- client := global.SseClientDevice
- client.URL = scanUrl
-
-
-
-
- ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
- if err != nil {
- panic(err)
- return
- }
- fmt.Println("开始SSE")
- err = client.SubscribeRaw(func(msg *sse.Event) {
- var data gateway.DeviceScannedFromGateway
- err := json.Unmarshal(msg.Data, &data)
- if err != nil {
- fmt.Printf("SSE数据转换异常:%s", err.Error())
- return
- }
- deviceScanned := gateway.DeviceScanned{}
- deviceScanned.MAC = data.Bdaddrs[0].Bdaddr
-
- if filterType == "1" {
- deviceService := GetDeviceService()
- _, i := deviceService.FindDeviceByMac(deviceScanned.MAC)
- if i > 0 {
- deviceScanned.Name = data.Name
- deviceScanned.Rssi = data.Rssi
- deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
- deviceScanned.Chip = data.ChipId
- deviceMap[deviceScanned.MAC] = deviceScanned
- fmt.Println(deviceScanned)
- }
- } else {
- deviceScanned.Name = data.Name
- deviceScanned.Rssi = data.Rssi
- deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
- deviceScanned.Chip = data.ChipId
- deviceMap[deviceScanned.MAC] = deviceScanned
- }
- if len(deviceMap) > 0 {
- if err != nil {
- fmt.Println("Websocket client init error" + err.Error())
- return
- }
- messageMap := make(map[string]string)
- messageMap["msgType"] = constant.MessageTypeDeviceScanned
- marshal, err := json.Marshal(deviceMap)
- if err != nil {
- fmt.Println("data parse Error :" + err.Error())
- return
- }
- messageMap["content"] = string(marshal)
- messageMap["Sender"] = "server"
- messageMap["Recipient"] = "client"
- bytes, err := json.Marshal(messageMap)
- if err != nil {
- fmt.Printf("json异常:%s", err.Error())
- return
- }
- err = ws.WriteMessage(websocket.TextMessage, bytes)
- if err != nil {
- fmt.Println("消息发送异常:" + err.Error())
- return
- }
- } else {
- err := ws.WriteMessage(websocket.TextMessage, []byte("{}"))
- if err != nil {
- fmt.Println("消息发送异常:" + err.Error())
- return
- }
- }
- time.Sleep(200 * time.Millisecond)
- })
- }
- func SseOpenNotify() {
- var notifyUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.NotifyUrl
- ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
- if err != nil {
- fmt.Println("Websocket client init error" + err.Error())
- return
- }
-
- client := global.SseClientData
- client.URL = notifyUrl
- err = client.SubscribeRaw(func(msg *sse.Event) {
- bytes := msg.Data
- s := string(bytes)
-
- flag := strings.HasPrefix(s, "E840") || strings.HasPrefix(s, "E841") || strings.HasPrefix(s, "E823")
-
- if !flag {
-
-
-
- var receiveData gateway.DeviceDataReceived
- errJson := json.Unmarshal(msg.Data, &receiveData)
- if errJson != nil {
- fmt.Println("receive data parse error:" + errJson.Error())
-
- return
- }
- messageMap := make(map[string]string)
- messageMap["msgType"] = constant.MessageTypeData
- messageMap["content"] = string(msg.Data)
- messageMap["Sender"] = "server"
- messageMap["Recipient"] = "client"
- bytes, err := json.Marshal(messageMap)
- err = ws.WriteMessage(websocket.TextMessage, bytes)
- if err != nil {
- fmt.Println(errors.SendMessageError + err.Error())
- return
- }
-
- } else {
- if len(bytes) == 18 {
- }
- }
-
-
-
- })
- if err != nil {
- return
- }
- }
|