mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-03-06 22:10:26 +00:00
39 lines
992 B
Scala
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
|
|
}
|
|
}
|