2016-03-03 25 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