manager.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package main
  2. import (
  3. "sparrow/pkg/online"
  4. "sparrow/pkg/rpcs"
  5. "sparrow/pkg/token"
  6. )
  7. type DeviceManager struct {
  8. onlineManager *online.Manager
  9. tokenHelper *token.Helper
  10. }
  11. func NewDeviceManager(redishost string, port, db int) *DeviceManager {
  12. mgr := online.NewManager(redishost, port, db)
  13. helper := token.NewHelper(redishost, port, db)
  14. return &DeviceManager{
  15. onlineManager: mgr,
  16. tokenHelper: helper,
  17. }
  18. }
  19. func (dm *DeviceManager) GenerateDeviceAccessToken(args rpcs.ArgsGenerateDeviceAccessToken, reply *rpcs.ReplyGenerateDeviceAccessToken) error {
  20. token, err := dm.tokenHelper.GenerateToken(args.Id)
  21. if err != nil {
  22. return err
  23. }
  24. reply.AccessToken = token
  25. return nil
  26. }
  27. func (dm *DeviceManager) ValidateDeviceAccessToken(args rpcs.ArgsValidateDeviceAccessToken, reply *rpcs.ReplyValidateDeviceAccessToken) error {
  28. return dm.tokenHelper.ValidateToken(args.Id, args.AccessToken)
  29. }
  30. func (dm *DeviceManager) GetOnline(args rpcs.ArgsGetOnline, reply *rpcs.ReplyGetOnline) error {
  31. return dm.onlineManager.GetOnline(args.Id, online.Status{
  32. ClientIP: args.ClientIP,
  33. AccessRPCHost: args.AccessRPCHost,
  34. HeartbeatInterval: args.HeartbeatInterval,
  35. })
  36. }
  37. func (dm *DeviceManager) GetOnlineV2(args rpcs.ArgsGetOnline, reply *rpcs.ReplyGetOnline) error {
  38. return dm.onlineManager.GetOnlineV2(args.Id, online.Status{
  39. ClientIP: args.ClientIP,
  40. AccessRPCHost: args.AccessRPCHost,
  41. HeartbeatInterval: args.HeartbeatInterval,
  42. })
  43. }
  44. func (dm *DeviceManager) HeartBeat(args rpcs.ArgsHeartBeat, reply *rpcs.ReplyHeartBeat) error {
  45. return dm.onlineManager.SetHeartbeat(args.Id)
  46. }
  47. func (dm *DeviceManager) GetOffline(args rpcs.ArgsGetOffline, reply *rpcs.ReplyGetOffline) error {
  48. return dm.onlineManager.GetOffline(args.Id)
  49. }
  50. func (dm *DeviceManager) GetDeviceOnlineStatus(args rpcs.ArgsGetDeviceOnlineStatus, reply *rpcs.ReplyGetDeviceOnlineStatus) error {
  51. status, err := dm.onlineManager.GetStatus(args.Id)
  52. if err != nil {
  53. return err
  54. }
  55. if status != nil {
  56. reply.ClientIP = status.ClientIP
  57. reply.AccessRPCHost = status.AccessRPCHost
  58. reply.HeartbeatInterval = status.HeartbeatInterval
  59. }
  60. return nil
  61. }