Skip to content

Instantly share code, notes, and snippets.

@nsadeh
Created August 8, 2020 23:24
Show Gist options
  • Save nsadeh/aac0639fc9a9630f1464bbdefb76f3b0 to your computer and use it in GitHub Desktop.
Save nsadeh/aac0639fc9a9630f1464bbdefb76f3b0 to your computer and use it in GitHub Desktop.
Describes a chat session
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