Created
March 21, 2019 14:36
-
-
Save MovileGente/3fa29e59e0651593bb4b56c93541d034 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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