agent.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. fmt.Printf("%s, %s\r\n", topic, payload)
  14. return nil
  15. }
  16. // Connected 设备接入时
  17. func (a *Agent) Connected(status *protocol.DevConnectStatus) error {
  18. // 查询设备信息
  19. device := &models.Device{}
  20. err := server.RPCCallByName(nil, rpcs.RegistryServerName, "Registry.FindDeviceByIdentifier", status.DeviceId, device)
  21. if err != nil {
  22. server.Log.Errorf("device not found %s", status.DeviceId)
  23. return nil
  24. }
  25. args := rpcs.ArgsGetOnline{
  26. Id: device.RecordId,
  27. ClientIP: status.ClientIp,
  28. AccessRPCHost: server.GetRPCHost(),
  29. HeartbeatInterval: 300,
  30. }
  31. reply := rpcs.ReplyGetOnline{}
  32. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetOnlineV2", args, &reply)
  33. if err != nil {
  34. server.Log.Errorf("device online error. args: %v, error: %v", args, err)
  35. }
  36. var cReply rpcs.ReplyEmptyResult
  37. var cArgs rpcs.ArgsGetStatus
  38. cArgs.VendorId = device.VendorID
  39. cArgs.Id = args.Id
  40. if err = server.RPCCallByName(nil, rpcs.ControllerName, "Controller.Online", &cArgs, &cReply); err != nil {
  41. return err
  42. }
  43. return nil
  44. }
  45. // Disconnected 设备断开连接时
  46. func (a *Agent) Disconnected(status *protocol.DevConnectStatus) error {
  47. // 查询设备信息
  48. device := &models.Device{}
  49. err := server.RPCCallByName(nil, rpcs.RegistryServerName, "Registry.FindDeviceByIdentifier", status.DeviceId, device)
  50. if err != nil {
  51. server.Log.Errorf("device not found %s", status.DeviceId)
  52. return nil
  53. }
  54. args := rpcs.ArgsGetOffline{
  55. Id: status.DeviceId,
  56. VendorId: device.VendorID,
  57. }
  58. reply := rpcs.ReplyGetOffline{}
  59. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetOffline", args, &reply)
  60. if err != nil {
  61. server.Log.Errorf("device offline error. deviceid: %v, error: %v", status.DeviceId, err)
  62. }
  63. return err
  64. }
  65. func NewAgent() *Agent {
  66. return &Agent{}
  67. }