PSF-LoginServer/pslogin/src/main/scala/SessionRouter.scala
2016-03-04 15:14:50 -05:00

39 lines
992 B
Scala

// Copyright (c) 2016 PSForever.net to present
import java.net.InetSocketAddress
import akka.actor.{Props, ActorRef, ActorLogging, Actor}
import scodec.bits._
import scala.collection.mutable
final case class RawPacket(data : ByteVector)
class SessionRouter extends Actor with ActorLogging {
val sessions = mutable.Map[InetSocketAddress, ActorRef]()
var sessionId = 0L
def receive = {
case ReceivedPacket(msg, from) =>
if(sessions.contains(from)) {
sessions{from} ! RawPacket(msg)
} else {
log.info("New session from " + from.toString)
val id = newSessionId
val loginSession = new LoginSession(id, sender(), from)
val ref = context.actorOf(Props(new LoginSessionActor(loginSession)),
"login-session" + id.toString)
sessions{from} = ref
ref ! RawPacket(msg)
}
case _ => log.error("Unknown message")
}
def newSessionId = {
val oldId = sessionId
sessionId += 1
oldId
}
}