2016-03-03 54 views
1

我接受WebSocket的消息在下列方式:傳遞價值創造一個演員處理的WebSocket播放2

def socket = WebSocket.tryAcceptWithActor[ChatCommand, JsValue] { request => 
    Future.successful(request.session.get("login") match { 
     case None => Left(Forbidden) 
     case Some(_) => Right(ChatActor.props) 
    }) 
    } 

如何傳遞的「登錄」,以演員的價值?

編輯:

object ChatActor{ 
    def props(out: ActorRef) = Props(new ChatActor(out)) 
.... 
} 

class ChatActor(out: ActorRef) extends Actor { 

    def receive = ... 

} 

當我改變的道具我沒有出去供應控制器。

回答

1

如果聊天的演員是一樣的東西

object ChatActor { 
    def props(out: ActorRef, login: String): Props = Props(new ChatActor(out, login)) 
} 

class ChatActor(out: ActorRef, login: String) extends Actor{ 
    override def receive: Receive = ??? 
} 

那麼你應該在代碼

def socket = WebSocket.tryAcceptWithActor[ChatCommand, JsValue] { request => 
    Future.successful(request.session.get("login") match { 
     case None => Left(Forbidden) 
     case Some(login) => Right(out => ChatActor.props(out, login)) 
    }) 
    } 

您可能會發現有趣的http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Props

+0

這就是我試圖做的。但play2 websocket演員很特別。他們需要將actorref作爲一個參數,它以某種方式神奇地提供給道具。我會立即更新我的帖子。這是我的錯,我提供了太少的示例代碼。 – Haito

+0

我以前叫上游的是你所說的。 Out是一個更好的名字。 :) –

+0

噢....非常感謝你的幫助,先生。 – Haito