mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-19 18:14:44 +00:00
Using built-in akka configs, we are able to map Actors to dispatchers in a fine-grained way. Now each session router, network listener, and zone have a dedicated set of threads. Currently all WorldSessions are sharing a single worker pool, which means that the server could still crash if all worker threads are exhausted. To prevent conditions like these, the amount of time spent on single actors based on time and number of messages can be tuned.Threads when not receiving work exit to save resources. Also all .conf files are now included in the resource packing process. Users should create user.conf to override these .conf files to avoid losing edits when updating the server version.
107 lines
5 KiB
Scala
107 lines
5 KiB
Scala
import xerial.sbt.pack.PackPlugin._
|
|
|
|
lazy val commonSettings = Seq(
|
|
organization := "net.psforever",
|
|
version := "1.0.2-SNAPSHOT",
|
|
scalaVersion := "2.11.8",
|
|
scalacOptions := Seq("-unchecked", "-feature", "-deprecation", "-encoding", "utf8", "-language:postfixOps"),
|
|
|
|
// Quiet test options
|
|
// https://github.com/etorreborre/specs2/blob/8305db76c5084e4b3ce5827ce23117f6fb6beee4/common/shared/src/main/scala/org/specs2/main/Report.scala#L94
|
|
// https://etorreborre.github.io/specs2/guide/SPECS2-2.4.17/org.specs2.guide.Runners.html
|
|
testOptions in QuietTest += Tests.Argument(TestFrameworks.Specs2, "showOnly", "x!"),
|
|
// http://www.scalatest.org/user_guide/using_the_runner
|
|
testOptions in QuietTest += Tests.Argument(TestFrameworks.ScalaTest, "-oCEHILMNOPQRX"),
|
|
// Trick taken from https://groups.google.com/d/msg/scala-user/mxV9ok7J_Eg/kt-LnsrD0bkJ
|
|
// scaladoc flags: https://github.com/scala/scala/blob/2.11.x/src/scaladoc/scala/tools/nsc/doc/Settings.scala
|
|
scalacOptions in (Compile,doc) := { Seq(
|
|
"-groups",
|
|
"-implicits",
|
|
"-doc-title", "PSF-LoginServer - ",
|
|
"-doc-version", "master",
|
|
"-doc-footer", "Copyright PSForever",
|
|
// For non unidoc builds, you may need bd.getName before the template parameter
|
|
"-doc-source-url", "https://github.com/psforever/PSF-LoginServer/blob/master/€{FILE_PATH}.scala",
|
|
"-sourcepath", baseDirectory.value.getAbsolutePath // needed for scaladoc relative source paths
|
|
)
|
|
},
|
|
classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat,
|
|
resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
|
|
libraryDependencies ++= Seq(
|
|
"com.typesafe.akka" %% "akka-actor" % "2.4.4",
|
|
"com.typesafe.akka" %% "akka-testkit" % "2.4.8" % "test",
|
|
"com.typesafe.scala-logging" %% "scala-logging" % "3.1.0",
|
|
"org.specs2" %% "specs2-core" % "3.8.3" % "test",
|
|
"org.scalatest" %% "scalatest" % "3.0.1" % "test",
|
|
"org.scodec" %% "scodec-core" % "1.10.0",
|
|
"org.scodec" %% "scodec-akka" % "0.2.0",
|
|
"net.java.dev.jna" % "jna" % "4.2.1",
|
|
"com.typesafe.akka" %% "akka-slf4j" % "2.4.4",
|
|
"ch.qos.logback" % "logback-classic" % "1.1.7",
|
|
"org.log4s" %% "log4s" % "1.3.0",
|
|
"org.fusesource.jansi" % "jansi" % "1.12",
|
|
"org.scoverage" %% "scalac-scoverage-plugin" % "1.1.1",
|
|
"com.github.nscala-time" %% "nscala-time" % "2.12.0",
|
|
"com.github.mauricio" %% "postgresql-async" % "0.2.21",
|
|
"com.github.t3hnar" %% "scala-bcrypt" % "3.1",
|
|
"org.ini4j" % "ini4j" % "0.5.4",
|
|
"org.scala-graph" %% "graph-core" % "1.12.5",
|
|
"io.kamon" %% "kamon-bundle" % "2.1.0",
|
|
"io.kamon" %% "kamon-apm-reporter" % "2.1.0",
|
|
"org.json4s" %% "json4s-native" % "3.6.8",
|
|
),
|
|
)
|
|
|
|
lazy val pscryptoSettings = Seq(
|
|
unmanagedClasspath in Test += (baseDirectory in ThisBuild).value / "pscrypto-lib",
|
|
unmanagedClasspath in Runtime += (baseDirectory in ThisBuild).value / "pscrypto-lib",
|
|
unmanagedClasspath in Compile += (baseDirectory in ThisBuild).value / "pscrypto-lib"
|
|
)
|
|
|
|
lazy val psloginPackSettings = Seq(
|
|
packMain := Map("ps-login" -> "PsLogin"),
|
|
packArchivePrefix := "pslogin",
|
|
packExtraClasspath := Map("ps-login" -> Seq("${PROG_HOME}/pscrypto-lib",
|
|
"${PROG_HOME}/config")),
|
|
packResourceDir += (baseDirectory.value / "pscrypto-lib" -> "pscrypto-lib"),
|
|
packResourceDir += (baseDirectory.value / "config" -> "config"),
|
|
packResourceDir += (baseDirectory.value / "pslogin/src/main/resources" -> "config")
|
|
)
|
|
|
|
lazy val root = (project in file(".")).
|
|
configs(QuietTest).
|
|
enablePlugins(PackPlugin).
|
|
settings(commonSettings: _*).
|
|
settings(psloginPackSettings: _*).
|
|
//enablePlugins(ScalaUnidocPlugin).
|
|
aggregate(pslogin, common).
|
|
dependsOn(pslogin, common)
|
|
|
|
lazy val pslogin = (project in file("pslogin")).
|
|
configs(QuietTest).
|
|
settings(commonSettings: _*).
|
|
settings(
|
|
name := "pslogin",
|
|
// ActorTests have specific timing requirements and will be flaky if run in parallel
|
|
parallelExecution in Test := false,
|
|
// TODO(chord): remove exclusion when WorldSessionActor is refactored: https://github.com/psforever/PSF-LoginServer/issues/279
|
|
coverageExcludedPackages := "WorldSessionActor.*;zonemaps.*",
|
|
// Copy all tests from Test -> QuietTest (we're only changing the run options)
|
|
inConfig(QuietTest)(Defaults.testTasks)
|
|
).
|
|
settings(pscryptoSettings: _*).
|
|
dependsOn(common)
|
|
|
|
lazy val common = (project in file("common")).
|
|
configs(QuietTest).
|
|
settings(commonSettings: _*).
|
|
settings(
|
|
name := "common",
|
|
// Copy all tests from Test -> QuietTest (we're only changing the run options)
|
|
inConfig(QuietTest)(Defaults.testTasks)
|
|
).
|
|
settings(pscryptoSettings: _*)
|
|
|
|
// Special test configuration for really quiet tests (used in CI)
|
|
lazy val QuietTest = config("quiet") extend(Test)
|