agent.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package main
  2. import (
  3. "fmt"
  4. "sparrow/pkg/models"
  5. "sparrow/pkg/protocol"
  6. "sparrow/pkg/rpcs"
  7. "sparrow/pkg/server"
  8. )
  9. type Agent struct {
  10. }
  11. // Message 收到设备上报消息处理
  12. func (a *Agent) Message(topic string, payload []byte) error {
  13. topicInfo, err := protocol.GetTopicInfo(topic)
  14. if err != nil {
  15. return err
  16. }
  17. if topicInfo.Direction == protocol.Down {
  18. return nil
  19. }
  20. fmt.Printf("%v", topicInfo)
  21. return nil
  22. }
  23. // Connected 设备接入时
  24. func (a *Agent) Connected(status *protocol.DevConnectStatus) error {
  25. // 查询设备信息
  26. device := &models.Device{}
  27. err := server.RPCCallByName(nil, rpcs.RegistryServerName, "Registry.FindDeviceByIdentifier", status.DeviceId, device)
  28. if err != nil {
  29. server.Log.Errorf("device not found %s", status.DeviceId)
  30. return nil
  31. }
  32. args := rpcs.ArgsGetOnline{
  33. Id: device.RecordId,
  34. ClientIP: status.ClientIp,
  35. AccessRPCHost: server.GetRPCHost(),
  36. HeartbeatInterval: 300,
  37. }
  38. reply := rpcs.ReplyGetOnline{}
  39. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetOnlineV2", args, &reply)
  40. if err != nil {
  41. server.Log.Errorf("device online error. args: %v, error: %v", args, err)
  42. }
  43. var cReply rpcs.ReplyEmptyResult
  44. var cArgs rpcs.ArgsGetStatus
  45. cArgs.VendorId = device.VendorID
  46. cArgs.Id = args.Id
  47. if err = server.RPCCallByName(nil, rpcs.ControllerName, "Controller.Online", &cArgs, &cReply); err != nil {
  48. return err
  49. }
  50. return nil
  51. }
  52. // Disconnected 设备断开连接时
  53. func (a *Agent) Disconnected(status *protocol.DevConnectStatus) error {
  54. // 查询设备信息
  55. device := &models.Device{}
  56. err := server.RPCCallByName(nil, rpcs.RegistryServerName, "Registry.FindDeviceByIdentifier", status.DeviceId, device)
  57. if err != nil {
  58. server.Log.Errorf("device not found %s", status.DeviceId)
  59. return nil
  60. }
  61. args := rpcs.ArgsGetOffline{
  62. Id: device.RecordId,
  63. VendorId: device.VendorID,
  64. }
  65. reply := rpcs.ReplyGetOffline{}
  66. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetOffline", args, &reply)
  67. if err != nil {
  68. server.Log.Errorf("device offline error. deviceid: %v, error: %v", status.DeviceId, err)
  69. }
  70. return err
  71. }
  72. func NewAgent() *Agent {
  73. return &Agent{}
  74. }