Config: add developer.Netsim.* (#285)

Break out configuration of the UDPNetworkSimulator to worldserver.ini
This commit is contained in:
pschord 2019-10-30 22:40:00 -04:00 committed by Fate-JH
parent ad29bfe16a
commit 53d677dc5d
4 changed files with 123 additions and 14 deletions

View file

@ -242,16 +242,19 @@ object PsLogin {
val loginServerPort = WorldConfig.Get[Int]("loginserver.ListeningPort")
val worldServerPort = WorldConfig.Get[Int]("worldserver.ListeningPort")
// Uncomment for network simulation
// TODO: make this config or command flag
/*
val netParams = NetworkSimulatorParameters(
packetLoss = 0.02,
packetDelay = 500,
packetReorderingChance = 0.005,
packetReorderingTime = 400
)
*/
val netSim : Option[NetworkSimulatorParameters] = WorldConfig.Get[Boolean]("developer.NetSim.Active") match {
case true =>
val params = NetworkSimulatorParameters(
WorldConfig.Get[Float]("developer.NetSim.Loss"),
WorldConfig.Get[Duration]("developer.NetSim.Delay").toMillis,
WorldConfig.Get[Float]("developer.NetSim.ReorderChance"),
WorldConfig.Get[Duration]("developer.NetSim.ReorderTime").toMillis
)
logger.warn("NetSim is active")
logger.warn(params.toString)
Some(params)
case false => None
}
val continentList = createContinents()
val serviceManager = ServiceManager.boot
@ -283,8 +286,8 @@ object PsLogin {
/** Create two actors for handling the login and world server endpoints */
loginRouter = Props(new SessionRouter("Login", loginTemplate))
worldRouter = Props(new SessionRouter("World", worldTemplate))
loginListener = system.actorOf(Props(new UdpListener(loginRouter, "login-session-router", LoginConfig.serverIpAddress, loginServerPort, None)), "login-udp-endpoint")
worldListener = system.actorOf(Props(new UdpListener(worldRouter, "world-session-router", LoginConfig.serverIpAddress, worldServerPort, None)), "world-udp-endpoint")
loginListener = system.actorOf(Props(new UdpListener(loginRouter, "login-session-router", LoginConfig.serverIpAddress, loginServerPort, netSim)), "login-udp-endpoint")
worldListener = system.actorOf(Props(new UdpListener(worldRouter, "world-session-router", LoginConfig.serverIpAddress, worldServerPort, netSim)), "world-udp-endpoint")
logger.info(s"NOTE: Set client.ini to point to ${LoginConfig.serverIpAddress.getHostAddress}:$loginServerPort")

View file

@ -16,13 +16,16 @@ import scala.concurrent.duration._
* forward or backwards in time)
*/
case class NetworkSimulatorParameters(packetLoss : Double,
packetDelay : Int,
packetDelay : Long,
packetReorderingChance : Double,
packetReorderingTime : Int) {
packetReorderingTime : Long) {
assert(packetLoss >= 0.0 && packetLoss <= 1.0)
assert(packetDelay >= 0)
assert(packetReorderingChance >= 0.0 && packetReorderingChance <= 1.0)
assert(packetReorderingTime >= 0)
override def toString = "NetSimParams: loss %.2f%% / delay %dms / reorder %.2f%% / reorder +/- %dms".format(
packetLoss*100, packetDelay, packetReorderingChance*100, packetReorderingTime);
}

View file

@ -1,5 +1,6 @@
// Copyright (c) 2019 PSForever
import net.psforever.config._
import scala.concurrent.duration._
object WorldConfig extends ConfigParser {
protected var config_map : Map[String, Any] = Map()
@ -10,6 +11,13 @@ object WorldConfig extends ConfigParser {
),
ConfigSection("worldserver",
ConfigEntryInt("ListeningPort", 51001, Constraints.min(1), Constraints.max(65535))
),
ConfigSection("developer",
ConfigEntryBool ("NetSim.Active", false),
ConfigEntryFloat("NetSim.Loss", 0.02f, Constraints.min(0.0f), Constraints.max(1.0f)),
ConfigEntryTime ("NetSim.Delay", 150 milliseconds, Constraints.min(0 seconds), Constraints.max(2 seconds)),
ConfigEntryFloat("NetSim.ReorderChance", 0.005f, Constraints.min(0.0f), Constraints.max(1.0f)),
ConfigEntryTime ("NetSim.ReorderTime", 150 milliseconds, Constraints.min(0 seconds), Constraints.max(2 seconds))
)
)