1

Ich versuche, meinen WebSocket Controller-Code auf Play 2.5 zu migrieren und habe die Anweisungen unter ScalaWebSockets befolgt. Ich erhalte Compilerfehler für meine Routenkonfigurationen. Mein WebSocket-Controller-Code ist wie folgtPlay Framework 2.5, Routen zum Web-Socket können nicht kompiliert werden

package controllers 

import akka.actor.ActorSystem 
import akka.stream.Materializer 
import com.google.inject.Inject 
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment} 
// This is needed to implicitly provide the Scala ActorSystem 
import play.api.libs.concurrent.Execution.Implicits._ 
import play.api.mvc._ 
import play.api.libs.streams._ 
import scala.concurrent.Future 

abstract class IntegrationMonitorProvider @Inject() (implicit system:  ActorSystem, 
               materializer: Materializer) 
    extends AuthenticationController{ 

    def monitor = WebSocket.acceptOrResult[String, String] { request => 
    implicit val req = Request(request, AnyContentAsEmpty) 
    SecuredRequestHandler { securedRequest => 
     Future.successful(HandlerResult(Ok, Some(securedRequest.identity))) 
    }.map { 
     case HandlerResult(r, Some(user)) => 
       Right(ActorFlow.actorRef(IntegrationMonitor.props(req.session.get("integration").get.toLong) _)) 
     case HandlerResult(r, None) => Left(r) 
    } 
    } 
} 

Die einzelnen Controller beabsichtigen WebSocket unterstützen soll dies verlängern. Dieses Muster funktionierte gut mit Play 2.4, und dieser Controller-Code kompiliert auch. Aber mein Fräser Config mit folgenden Fehlern fehlschlägt

Routen kompilieren: 56: für die Methode nicht genug Argumente gelten: (Anfrage: play.api.mvc.RequestHeader) scala.concurrent.Future [Entweder [play. api.mvc.Result, akka.stream.scaladsl.Flow [play.api.http.websocket.Message, play.api.http.websocket.Message, _]]] in der WebSocket-Eigenschaft. Nicht spezifizierte Wertparameteranforderung.

Read from stdout: 
GET  /sample/monitor  controllers.sample.Connection.monitor() 

Die Steuerung, die die IntegrationMonitorProvider erweitert ist, wie unten

package controllers.sample 
import javax.inject.Inject 
import akka.actor.ActorSystem 
import akka.stream.Materializer 
import controllers.{IntegrationMonitor, IntegrationMonitorProvider} 
import modules.oauth.{Credential, Metadata, TokenReader} 
import play.Logger 
import play.api.i18n.MessagesApi 
import play.api.libs.json.JsResult 
import play.api.mvc.{AnyContent, BodyParsers} 
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment} 
// This is needed to implicitly provide the Scala ActorSystem 
import play.api.libs.concurrent.Execution.Implicits._ 
import scala.concurrent.Future 

class Connection @Inject()(val env: AuthenticationEnvironment, val messagesApi: MessagesApi) 
         (implicit system: ActorSystem, 
         materializer: Materializer) 
extends IntegrationMonitorProvider with UrlCreator with DataReader {... 

Schätzen Hilfe mit der.

Antwort

1

kann ich das Problem beheben, indem Sie die Klammer in routes

Das Entfernen ist,

GET  /sample/monitor  controllers.sample.Connection.monitor 

statt

GET  /sample/monitor  controllers.sample.Connection.monitor() 
+0

hatte zog ich weg von Websockets diese behoben. Werde deinen Vorschlag versuchen und zurückkommen. Vielen Dank. – JerryK