Replies: 1 comment
-
Figured it out by following this guide. Here is my example i've created: Controllerpackage controllers
import javax.inject.Inject
import actors.WebSocketActor
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.stream.Materializer
import play.api.libs.streams.ActorFlow
import play.api.mvc._
import play.api.libs.json._
class WebSocketHandler @Inject()(cc: ControllerComponents)(implicit system: ActorSystem, mat: Materializer) extends AbstractController(cc) {
def handleUploadStatus: WebSocket = WebSocket.accept[JsValue, JsValue] { request =>
ActorFlow.actorRef { out => WebSocketActor.props(out) }
}
} Untyped Classical Actorpackage actors
import org.apache.pekko.actor._
import play.api.libs.json._
import org.apache.pekko.actor.typed.scaladsl.adapter._
import org.apache.pekko.actor.typed.{ ActorRef => TypedActorRef }
object WebSocketActor {
def props(out: ActorRef) = Props(new WebSocketActor(out))
}
class WebSocketActor(out: ActorRef) extends Actor {
def receive = {
case js: JsValue =>
val jsonObj: JsValue = Json.obj(
"greet" -> "hello"
)
out ! jsonObj
val testActor: TypedActorRef[TestActor.SayHello] = context.spawn(TestActor(), "testActor")
testActor ! TestActor.SayHello("Tomas", self)
}
} Typed Functional Style Actorpackage actors
import org.apache.pekko.actor.typed.Behavior
import org.apache.pekko.actor.typed.scaladsl.Behaviors
import org.apache.pekko.actor.typed.ActorRef
object TestActor {
final case class SayHello(name: String, replyTo: ActorRef[String])
def apply(): Behavior[SayHello] = Behaviors.receiveMessage { message =>
val msg = s"Hello, ${message.name}"
println(msg)
message.replyTo ! msg
Behaviors.same
}
} |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
How to convert Play 3.0.4 untyped Actor to typed Pekko actor on WebSocket connection?
Beta Was this translation helpful? Give feedback.
All reactions