package api import ( "confrontation-training/global" "confrontation-training/models" "encoding/json" "fmt" "github.com/r3labs/sse/v2" "time" ) // SseScanDevice 扫描设备 func SseScanDevice(paramMap map[string]string) map[string]models.DeviceScanned { var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl 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 } }() timer := time.NewTimer(time.Duration(global.Config.Gateway.ScanSecond) * time.Second) events := make(chan *sse.Event) select { case <-timer.C: fmt.Println("关闭SSE:" + (time.Now()).String()) client.Unsubscribe(events) timer.Stop() } return deviceMap } // SseOpenNotify 开启通知 func SseOpenNotify() { var notifyUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.NotifyUrl client := sse.NewClient(notifyUrl) err := client.SubscribeRaw(func(msg *sse.Event) { }) if err != nil { return } }