manager.go 1.9 KB

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