Skip to content

Instantly share code, notes, and snippets.

@MovileGente
Created March 21, 2019 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MovileGente/3fa29e59e0651593bb4b56c93541d034 to your computer and use it in GitHub Desktop.
Save MovileGente/3fa29e59e0651593bb4b56c93541d034 to your computer and use it in GitHub Desktop.
fun sendMessageToUser(userId: Int, message: String, cont: Continuation) {
   val stateMachine = cont as? CoroutineImpl // verifica se já temos uma máquina de estados instanciada (ou seja, já passamos pelo menos uma vez por essa função)
                      ?: object : CoroutineImpl { // cria uma máquina de estados que chama a própria função
       fun resume(...) {
           sendMessageToUser(userId, message, this) // Hooray, Callback
       }
   }
   switch(stateMachine.label) {
   case 0: // Kotlin usa labels para saber em qual passo estamos
       stateMachine.userId = userId
       stateMachine.message = message
       stateMachine.label = 1 // guarda a label do **próximo** passo
       queryUser(userId, stateMachine) // executa a função usando a máquina de estados para guardar o estado
   case 1:
       val user = stateMachine.result as User // Usa o resultado da função que foi chamada anteriormente
       stateMachine.label = 2
       sendEmail(user.email, message, stateMachine)
   ...
   }
 ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment