Как использовать WebSockets в Scala с использованием Play Framework? - PullRequest
2 голосов
/ 11 июня 2011

Я хотел бы использовать WebSockets в Scala и Play Framework.Но я не могу заставить работать пример Echo-server .

Что я должен импортировать для await() и disconnect()?

Я получаю ошибкуError raised is : not found: value await.Я использовал код ниже:

package controllers
import play._
import play.mvc._
import play.mvc.Http.WebSocketEvent
import play.mvc.Http.WebSocketFrame
import play.mvc.Http.WebSocketClose
import play.mvc.WebSocketController

object MySocket extends WebSocketController {
    def echo = {
        while(Http.Inbound.current().isOpen()) {

            val e : WebSocketEvent = 
        await(Http.Inbound.current().nextEvent()).asInstanceOf[WebSocketEvent]

            if(e.isInstanceOf[WebSocketFrame]) {
                val frame : WebSocketFrame = e.asInstanceOf[WebSocketFrame]

                if(!frame.isBinary) {
                    if(frame.textData.equals("quit")) {
                        Http.Outbound.current().send("Bye!");
                        disconnect();
                    } else {
                        Http.Outbound.current().send("Echo: " + frame.textData)
                    }
                }
            }
            if(e.isInstanceOf[WebSocketClose]) {
                Logger.info("Socket closed!")
            }
        }
    }
}

Вот ошибка компиляции в Терминале:

Compiling:
    /Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala
/Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala:14: not found: value await
            val e : WebSocketEvent = await(Http.Inbound.current().nextEvent()).asInstanceOf[WebSocketEvent]
                                     ^
/Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala:20: not found: value disconnect
                        disconnect();
                        ^
two errors found
Compiling:
    /Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala
/Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala:14: not found: value await
            val e : WebSocketEvent = await(Http.Inbound.current().nextEvent()).asInstanceOf[WebSocketEvent]
                                     ^
/Users/jonas/play-1.2.2RC1/jonassite/app/MySocket.scala:20: not found: value disconnect
                        disconnect();
                        ^
two errors found
12:52:57,049 ERROR ~ 

@66lce6kp8
Internal Server Error (500) for request GET /handshake

Compilation error (In /app/MySocket.scala around line 14)
The file /app/MySocket.scala could not be compiled. Error raised is : not found: value await

play.exceptions.CompilationException: not found: value await
    at play.scalasupport.ScalaPlugin.compilationException(ScalaPlugin.scala:129)
    at play.scalasupport.ScalaPlugin.detectClassesChange(ScalaPlugin.scala:115)
    at play.plugins.PluginCollection.detectClassesChange(PluginCollection.java:358)
    at play.Play.detectChanges(Play.java:591)
    at play.Invoker$Invocation.init(Invoker.java:186)
    at Invocation.HTTP Request(Play!)

1 Ответ

4 голосов
/ 11 июня 2011

await() и disconnect() - это методы, доступные из WebSocketController. Однако в настоящее время они доступны только в версии Java, а не в Scala. Посмотрите эту запись здесь на игровых группах для получения дополнительной информации.

Это должно быть доступно в версии 1.0 плагина scala, но сейчас, если вы хотите использовать функции aysnc (ожидайте и т. Д.), Вам придется использовать Java или взглянуть на оболочку Java. пользователей Play.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...