mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
PsAdmin uses a dedicated TCP port to allow for remote queries and command to be sent to the running World/Login server. Commands are a single command followed by zero or more arguments. Commands may require access to the ActorSystem, so they will get their own dedicated actors to be able to handle the different messages required that can be sent in response to a query. The return line is in JSON to allow for easy parsing by applications, such as web servers. An interactive client is easy as being able to parse json and buffer command input. Some basic commands are implemented for now: * shutdown - kills the actor system * list_players - gets a list of players on the interstellar cluster * dump_config - get the running config * thread_dump - dumps all thread backtraces (useful for prod debugging) More advanced commands like kick/ban will require additional testing.
105 lines
4.8 KiB
Scala
105 lines
4.8 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
|
|
)
|
|
},
|
|
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")
|
|
)
|
|
|
|
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)
|