123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package api
- import (
- "confrontation-training/constant"
- errmsg "confrontation-training/err"
- "confrontation-training/global"
- "confrontation-training/models"
- "encoding/json"
- "fmt"
- "github.com/gorilla/websocket"
- "github.com/r3labs/sse/v2"
- "strings"
- "time"
- )
- // SseScanDevice 扫描设备
- func SseScanDevice(paramMap map[string]string) {
- var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl
- ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
- if err != nil {
- fmt.Println("Websocket client init error" + err.Error())
- return
- }
- deviceMap := make(map[string]models.DeviceScanned)
- if len(paramMap) > 0 {
- for key, value := range paramMap {
- scanUrl += "&" + key + "=" + value
- }
- }
- client := sse.NewClient(scanUrl)
- go func() {
- fmt.Println("开始SSE")
- err := client.SubscribeRaw(func(msg *sse.Event) {
- //fmt.Println(string(msg.Data))
- var data models.DeviceScannedFromGateway
- err := json.Unmarshal(msg.Data, &data)
- if err != nil {
- fmt.Printf("SSE数据转换异常:%s", err.Error())
- return
- }
- deviceScanned := models.DeviceScanned{}
- deviceScanned.Name = data.Name
- deviceScanned.Rssi = data.Rssi
- deviceScanned.MAC = data.Bdaddrs[0].Bdaddr
- deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
- deviceScanned.Chip = data.ChipId
- deviceMap[deviceScanned.MAC] = deviceScanned
- fmt.Println(deviceScanned)
- })
- if err != nil {
- fmt.Println(err.Error())
- return
- }
- }()
- if err != nil {
- fmt.Println(err.Error())
- return
- }
- timer := time.NewTimer(time.Duration(global.Config.Gateway.ScanSecond) * time.Millisecond)
- select {
- case <-timer.C:
- messageMap := make(map[string]map[string]models.DeviceScanned)
- messageMap[constant.MessageTypeDeviceScanned] = deviceMap
- bytes, err := json.Marshal(messageMap)
- if err != nil {
- fmt.Printf("json异常:%s", err.Error())
- return
- }
- err = ws.WriteMessage(websocket.TextMessage, bytes)
- if err != nil {
- return
- }
- }
- }
- // SseOpenNotify 开启通知
- 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 := sse.NewClient(notifyUrl)
- err = client.SubscribeRaw(func(msg *sse.Event) {
- s := string(msg.Data)
- fmt.Println("notify receive data :" + s)
- flag := strings.HasPrefix(s, "E840") || strings.HasPrefix(s, "E841") || strings.HasPrefix(s, "E823")
- if !flag {
- //websocket 通知数据
- //msgMap := make(map[string]string)
- //msgMap[]
- err := ws.WriteMessage(websocket.TextMessage, msg.Data)
- if err != nil {
- fmt.Println(errmsg.SendMessageError + err.Error())
- return
- }
- }
- })
- if err != nil {
- return
- }
- }
|