main.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/encoding/gjson"
  6. "github.com/gogf/gf/v2/os/glog"
  7. "github.com/gogf/gf/v2/os/gproc"
  8. "os"
  9. "sparrow-sdk/config"
  10. "sparrow-sdk/protocal"
  11. gatewayV2 "sparrow-sdk/v2"
  12. "water-system-gateway/protocol"
  13. "water-system-gateway/server"
  14. )
  15. func main() {
  16. ctx := context.Background()
  17. err := glog.SetLevelStr(protocol.GetConfig("Server.RunMode").String())
  18. if err != nil {
  19. panic(err)
  20. }
  21. gw := gatewayV2.NewGateway(&config.Config{
  22. SparrowServer: protocol.GetConfig("Sparrow.Server").String(),
  23. ProductKey: protocol.GetConfig("Sparrow.ProductKey").String(),
  24. Protocol: "mqtt",
  25. DeviceCode: protocol.GetConfig("Sparrow.DeviceCode").String(),
  26. Version: "1.0.0",
  27. Debug: protocol.GetConfig("Sparrow.Debug").Bool(),
  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. protocol.GetConfig("Server.Addr").String(),
  43. protocol.GetConfig("Server.Port").Int(),
  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. fmt.Println(msg.Data.Cmd)
  57. case <-closeReportChan:
  58. return
  59. }
  60. }
  61. }()
  62. if err = gw.RegisterCommand("waterSystemControl", func(msg protocal.CloudSend) error {
  63. var params protocol.ControlArgs
  64. j := gjson.New(msg.Data.Params)
  65. err = j.Scan(&params)
  66. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  67. client := srv.GetClient(msg.SubDeviceId)
  68. if client != nil {
  69. if err = client.WaterSystemControl(uint16(params.Address), params.Value); err != nil {
  70. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  71. return err
  72. }
  73. }
  74. return nil
  75. }); err != nil {
  76. panic(err)
  77. }
  78. gproc.AddSigHandlerShutdown(func(sig os.Signal) {
  79. gw.Close()
  80. srv.Stop()
  81. })
  82. gproc.Listen()
  83. }