Guest User

Untitled

a guest
Feb 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. // MARK: - Running
  2. extension EventsWorker {
  3.  
  4. func run() -> Promise<()> {
  5. guard !inProgress else { log.info("New start call aborted, service already in proggres"); return Promise(value: ()) }
  6. guard !queue.isEmpty else { log.info("Nothing to send."); return Promise(value: ()) }
  7. log.info("Start")
  8.  
  9. inProgress = true
  10.  
  11. return executeNextTask()
  12. .then {
  13. log.info("Finish")
  14. return Promise(value: ())
  15. }
  16. .always {
  17. self.inProgress = false
  18. }
  19. }
  20.  
  21. private func executeNextTask() -> Promise<()> {
  22. guard let task = queue.get() else { return Promise(value: ()) }
  23.  
  24. log.info("Start new task")
  25.  
  26. return task.resume()
  27. .then { result -> Promise<()> in
  28. switch result {
  29. case .completed:
  30.  
  31. log.info("Task completed")
  32. self.queue.pop()
  33. return self.executeNextTask()
  34.  
  35. case .gatewayUnreachable:
  36.  
  37. log.info("Gateway Unreachable")
  38. self.queue.save()
  39. return Promise(error: Errors.gatewayUnreachable)
  40.  
  41. case .gatewayError(let type, let message, let debugInfo):
  42.  
  43. //TODO: save error in ERROR LOG
  44. log.warning("(type) (message) (debugInfo)")
  45. self.queue.pop()
  46. return self.executeNextTask()
  47.  
  48. }
  49. }
  50. .recover { error -> Promise<()> in
  51. switch error {
  52. case Errors.gatewayUnreachable:
  53. throw error
  54. default:
  55. log.error(error)
  56. self.queue.pop()
  57. return self.executeNextTask()
  58. }
  59. }
  60. }
  61. }
  62.  
  63. // MARK: - Error
  64. extension EventsWorker {
  65.  
  66. enum Errors: Error {
  67. case gatewayUnreachable
  68. }
  69. }
  70.  
  71. func resume() -> Promise<EventsWorkerTaskResult> {
  72. //stuff
  73. }
  74.  
  75. enum EventsWorkerTaskResult {
  76. case completed
  77. case gatewayUnreachable
  78. case gatewayError(type: String, message: String, debugInfo: String)
  79. }
Add Comment
Please, Sign In to add comment