task.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package server
  2. import (
  3. "context"
  4. "github.com/go-co-op/gocron"
  5. "github.com/go-nunu/nunu-layout-advanced/internal/task"
  6. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  7. "go.uber.org/zap"
  8. "time"
  9. )
  10. type TaskServer struct {
  11. log *log.Logger
  12. scheduler *gocron.Scheduler
  13. userTask task.UserTask
  14. gameShieldTask task.GameShieldTask
  15. }
  16. func NewTaskServer(
  17. log *log.Logger,
  18. userTask task.UserTask,
  19. gameShieldTask task.GameShieldTask,
  20. ) *TaskServer {
  21. return &TaskServer{
  22. log: log,
  23. userTask: userTask,
  24. gameShieldTask: gameShieldTask,
  25. }
  26. }
  27. func (t *TaskServer) Start(ctx context.Context) error {
  28. gocron.SetPanicHandler(func(jobName string, recoverData interface{}) {
  29. t.log.Error("TaskServer Panic", zap.String("job", jobName), zap.Any("recover", recoverData))
  30. })
  31. // eg: crontab task
  32. t.scheduler = gocron.NewScheduler(time.UTC)
  33. // if you are in China, you will need to change the time zone as follows
  34. // t.scheduler = gocron.NewScheduler(time.FixedZone("PRC", 8*60*60))
  35. //_, err := t.scheduler.Every("3s").Do(func()
  36. //_, err := t.scheduler.CronWithSeconds("0/3 * * * * *").Do(func() {
  37. // err := t.userTask.CheckUser(ctx)
  38. // if err != nil {
  39. // t.log.Error("CheckUser error", zap.Error(err))
  40. // }
  41. //})
  42. //if err != nil {
  43. // t.log.Error("CheckUser error", zap.Error(err))
  44. //}
  45. // 添加游戏盾检查任务 - 每1小时执行
  46. _, err := t.scheduler.Cron("0 */1 * * *").Do(func() {
  47. err := t.gameShieldTask.CheckGameShield(ctx)
  48. if err != nil {
  49. t.log.Error("CheckGameShield error", zap.Error(err))
  50. }
  51. })
  52. if err != nil {
  53. t.log.Error("Register CheckGameShield task error", zap.Error(err))
  54. }
  55. // 添加游戏盾数据同步任务 - 每天凌晨3点执行
  56. _, err = t.scheduler.Cron("0 3 * * *").Do(func() {
  57. err := t.gameShieldTask.SyncAllExpireTimeFromHost(ctx)
  58. if err != nil {
  59. t.log.Error("SyncAllExpireTimeFromHost error", zap.Error(err))
  60. }
  61. })
  62. if err != nil {
  63. t.log.Error("Register SyncAllExpireTimeFromHost task error", zap.Error(err))
  64. }
  65. t.scheduler.StartBlocking()
  66. return nil
  67. }
  68. func (t *TaskServer) Stop(ctx context.Context) error {
  69. t.scheduler.Stop()
  70. t.log.Info("TaskServer stop...")
  71. return nil
  72. }