main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package main
  2. import (
  3. "bth-rs30-gateway/protocol"
  4. "bth-rs30-gateway/server"
  5. "context"
  6. "github.com/gogf/gf/encoding/gjson"
  7. "github.com/gogf/gf/frame/g"
  8. "github.com/gogf/gf/os/glog"
  9. "github.com/gogf/gf/os/gproc"
  10. "os"
  11. "sparrow-sdk/config"
  12. "sparrow-sdk/protocal"
  13. gatewayV2 "sparrow-sdk/v2"
  14. )
  15. func main() {
  16. ctx := context.Background()
  17. err := glog.SetLevelStr(g.Cfg().GetString("Server.RunMode"))
  18. if err != nil {
  19. panic(err)
  20. }
  21. gw := gatewayV2.NewGateway(&config.Config{
  22. SparrowServer: g.Cfg().GetString("Sparrow.Server"),
  23. ProductKey: g.Cfg().GetString("Sparrow.ProductKey"),
  24. Protocol: "mqtt",
  25. DeviceCode: g.Cfg().GetString("Sparrow.DeviceCode"),
  26. Version: "1.0.0",
  27. Debug: g.Cfg().GetBool("Sparrow.Debug"),
  28. })
  29. if _, err = gw.Register(); err != nil {
  30. panic(err)
  31. }
  32. if _, err = gw.Authentication(); err != nil {
  33. panic(err)
  34. }
  35. // 通用指令回调
  36. gw.SetReportCommandCallback(func(deviceCode, subId string) error {
  37. return nil
  38. })
  39. go gw.Connect()
  40. srv := server.NewServer(
  41. ctx,
  42. g.Cfg().GetString("Server.Addr"),
  43. g.Cfg().GetInt("Server.Port"),
  44. gw,
  45. )
  46. go func() {
  47. if err := srv.Start(); err != nil {
  48. panic(err)
  49. }
  50. }()
  51. closeReportChan := make(chan struct{})
  52. go func() {
  53. for {
  54. select {
  55. case msg := <-gw.RecvCommand():
  56. if msg.Data.Cmd == "SetOffset" {
  57. }
  58. case <-closeReportChan:
  59. return
  60. }
  61. }
  62. }()
  63. if err = gw.RegisterCommand("SetOffset", func(msg protocal.CloudSend) error {
  64. var params protocol.SetOffSetParams
  65. j := gjson.New(msg.Data.Params)
  66. err = j.Struct(&params)
  67. if err != nil {
  68. glog.Errorf("错误的指令参数%s", err.Error())
  69. return err
  70. }
  71. glog.Debugf("指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  72. client := srv.GetClient(msg.SubDeviceId)
  73. if client != nil {
  74. if err = client.SetOffset(params.Act, params.Value, 1); err != nil {
  75. glog.Errorf("执行命令出错:%s", err.Error())
  76. return err
  77. }
  78. }
  79. return nil
  80. }); err != nil {
  81. panic(err)
  82. }
  83. gproc.AddSigHandlerShutdown(func(sig os.Signal) {
  84. gw.Close()
  85. srv.Stop()
  86. })
  87. gproc.Listen()
  88. }