Je suis nouveau sur Play Framework et Scala. J'essayais d'écrire le téléchargement de fichiers en utilisant des websockets en jeu. J'ai compris que cela peut être fait en utilisant ByteString
. Mais le problème auquel je suis confronté est que je ne suis pas capable de garder les messages de réponse comme String
.Websocket pour gérer ByteString et String in Play 2.5
def upload = WebSocket.accept[ByteString, String] { request =>
ActorFlow.actorRef(out => UploadActor.props(out))
}
L'exception me fais est la suivante,
play.sbt.PlayExceptions$CompilationException: Compilation error[could not find implicit value for parameter transformer: play.api.mvc.WebSocket.MessageFlowTransformer[akka.util.ByteString,String]]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
at scala.Option.map(Option.scala:145)
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49)
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44)
at scala.Option.map(Option.scala:145)
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44)
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40)
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
L'acteur de gérer la websocket se présente comme suit,
class UploadActor(out: ActorRef) extends Actor{
out ! "Hello"
def receive = {
case msg: ByteString => {
val p = new PrintWriter(new File("/tmp/newFile.mp4"))
p.print(msg.asByteBuffer)
p.flush()
out ! "file received"
}
case msg: String => out ! ("Got it "+ msg)
}
}
J'ai placé le code donné dans le contrôleur, mais c'est toujours la même exception. – vinnu313