Advertisement
Guest User

Untitled

a guest
Sep 1st, 2017
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. open class AsyncRoute<Request, Response> : Route<Request, Response>()
  2. {
  3. /**
  4. * Channel provided by client application while building routes. This is how application listens for any
  5. * responses generated by its routes.
  6. */
  7. protected open lateinit var responseChannel: SendChannel<Response>
  8. /**
  9. * Listens for any responses generated by this route's controller, then if they pass
  10. * any tests provided by this route, passes them back to client.
  11. */
  12. protected open val listener = actor<Response>(CommonPool)
  13. {
  14. for (response in channel) this@AsyncRoute.attemptRespondSuspend(response)
  15. }
  16.  
  17. override fun getControllerInstance(): Controller<Response>
  18. {
  19. return super.getControllerInstance().apply { (this as? AsyncController<Response>)?.listen(listener) }
  20. }
  21.  
  22. open suspend fun attemptRespondSuspend(response: Response)
  23. {
  24. if (canRespond(response)) responseChannel.send(response)
  25. }
  26.  
  27. override fun attemptRespond(response: Response)
  28. {
  29. launch(CommonPool) { attemptRespondSuspend(response) }
  30. }
  31.  
  32. /**
  33. * In case of application shut down, this method should be called to clean this route's listener.
  34. */
  35. open fun close()
  36. {
  37. listener.cancel()
  38. }
  39.  
  40. override fun attemptTrigger(request: Request)
  41. {
  42. if (canTrigger(request))
  43. {
  44. callback(this, request)
  45. getCurrentControllerInstance().getResponses().forEach(this::attemptRespond)
  46. }
  47. else
  48. getCurrentControllerInstance().getResponses() // used to clean out and discard any responses if they were generated
  49. }
  50.  
  51. /**
  52. * Returns an empty list, since it isn't necessary anymore.
  53. */
  54. override fun getResponses(): List<Response>
  55. {
  56. return listOf()
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement