task.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. class Task {
  2. context
  3. delayTime
  4. name
  5. logger
  6. fileLogger
  7. constructor(taskName, delayTime, initFun, onTickFun, logFilePath='task.log') {
  8. this.name = taskName
  9. this.delayTime = delayTime
  10. this.init = initFun
  11. this.onTick = onTickFun
  12. this.consoleLoggerInit()
  13. this.fileLoggerInit(logFilePath)
  14. }
  15. consoleLoggerInit() {
  16. const log4js = require('log4js')
  17. this.logger = log4js.getLogger(this.name)
  18. this.logger.level = log4js.levels.TRACE
  19. }
  20. fileLoggerInit(logFilePath) {
  21. const log4js = require('log4js')
  22. log4js.configure({
  23. appenders: {
  24. main: {
  25. type: 'file',
  26. filename: logFilePath
  27. }
  28. },
  29. categories: {
  30. default: {
  31. appenders: ['main'],
  32. level: log4js.levels.TRACE
  33. }
  34. }
  35. })
  36. this.fileLogger = log4js.getLogger(this.name)
  37. this.fileLogger.level = log4js.levels.TRACE
  38. }
  39. async Start() {
  40. const task = this
  41. this.logger.info(`Init context or others.`)
  42. await this.init()
  43. this.logger.info(`Dida dida dida, on tick, on tick...`)
  44. this.interval = setInterval(async () => {
  45. try {
  46. await task.onTick()
  47. } catch (e) {
  48. task.logger.error(e)
  49. }
  50. }, this.delayTime)
  51. }
  52. async Stop() {
  53. clearInterval(this.interval)
  54. }
  55. }
  56. module.exports = Task