sse.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package api
  2. import (
  3. "confrontation-training/global"
  4. "confrontation-training/models"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/r3labs/sse/v2"
  8. "time"
  9. )
  10. // SseScanDevice 扫描设备
  11. func SseScanDevice(paramMap map[string]string) map[string]models.DeviceScanned {
  12. var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl
  13. deviceMap := make(map[string]models.DeviceScanned)
  14. if len(paramMap) > 0 {
  15. for key, value := range paramMap {
  16. scanUrl += "&" + key + "=" + value
  17. }
  18. }
  19. client := sse.NewClient(scanUrl)
  20. go func() {
  21. fmt.Println("开始SSE")
  22. err := client.SubscribeRaw(func(msg *sse.Event) {
  23. //fmt.Println(string(msg.Data))
  24. var data models.DeviceScannedFromGateway
  25. err := json.Unmarshal(msg.Data, &data)
  26. if err != nil {
  27. fmt.Printf("SSE数据转换异常:%s", err.Error())
  28. return
  29. }
  30. deviceScanned := models.DeviceScanned{}
  31. deviceScanned.Name = data.Name
  32. deviceScanned.Rssi = data.Rssi
  33. deviceScanned.MAC = data.Bdaddrs[0].Bdaddr
  34. deviceScanned.BdadrType = data.Bdaddrs[0].BdaddrType
  35. deviceScanned.Chip = data.ChipId
  36. deviceMap[deviceScanned.MAC] = deviceScanned
  37. fmt.Println(deviceScanned)
  38. })
  39. if err != nil {
  40. fmt.Println(err.Error())
  41. return
  42. }
  43. }()
  44. timer := time.NewTimer(time.Duration(global.Config.Gateway.ScanSecond) * time.Second)
  45. events := make(chan *sse.Event)
  46. select {
  47. case <-timer.C:
  48. fmt.Println("关闭SSE:" + (time.Now()).String())
  49. client.Unsubscribe(events)
  50. timer.Stop()
  51. }
  52. return deviceMap
  53. }
  54. // SseOpenNotify 开启通知
  55. func SseOpenNotify() {
  56. var notifyUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.NotifyUrl
  57. client := sse.NewClient(notifyUrl)
  58. err := client.SubscribeRaw(func(msg *sse.Event) {
  59. })
  60. if err != nil {
  61. return
  62. }
  63. }