Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class RequestDispatcher extends Actor{
- self.faultHandler = OneForOneStrategy(List(classOf[Exception]), 5, 5000)
- val sessions = collection.mutable.HashMap.empty[String, ActorRef]
- protected def receive = {
- case Request(ctx) => {
- var userId = ctx.param("userId")
- if(userId == null) userId = UUID.randomUUID.toString
- val session = sessions.getOrElseUpdate(userId, {
- val a = Actor.actorOf(new UserSession(userId))
- self.startLink(a)
- a
- })
- ctx.ctx.addListener(new AsyncListener(){
- def onStartAsync(p1: AsyncEvent) {}
- def onError(p1: AsyncEvent) {
- session ! CloseRequest()
- }
- def onTimeout(p1: AsyncEvent) {
- }
- def onComplete(p1: AsyncEvent) {}
- })
- session ! Request(ctx)
- }
- case CloseSession(userId) => {
- for(s <- sessions.get(userId)) {
- self.unlink(s)
- s.stop()
- sessions -= userId
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement