Created
August 8, 2020 23:24
-
-
Save nsadeh/aac0639fc9a9630f1464bbdefb76f3b0 to your computer and use it in GitHub Desktop.
Describes a chat session
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
import akka.actor.typed.{ Behavior, SpawnProtocol, ActorRef } | |
import akka.actor.typed.scaladsl.Behaviors | |
object SessionActor { | |
// protocol - see gist below | |
import CoreChatEvents._ | |
import WebSocketsEvents._ | |
def receive(websocket: Option[ActorRef[WebSocketsEvent]]): Behavior[CoreChatEvent] = Behaviors.receiveMessage { | |
// received a message from the user, route to this phone | |
case UserMessage(msg, phone) => | |
println(s"Sending message $msg to phone $phone") | |
// interface with ClientMessageService here | |
Behaviors.same | |
// received an SMS message from the client, route back to the websocket | |
case SMSMessage(sender, message) => | |
println("Received SMS Message!") | |
websocket.foreach { socket => | |
socket ! MessageToUser(sender, message) | |
} | |
Behaviors.same | |
// received connection request, update websocket | |
case Connected(websocket) => | |
println("Received connection request!") | |
receive(Some(websocket)) | |
case Disconnected => | |
println("Dying now!") | |
Behaviors.stopped | |
case Failed(ex) => | |
throw new RuntimeException(ex) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment