Create an Example Server
An Example Server
package example
import scala.language._
import akka.actor._
import akka.http.scaladsl
import scaladsl._
import scaladsl.server
import scaladsl.model._
import server._
import server.Directives._
import akka.stream
import stream._
import stream.scaladsl._
import scaladsl.model.StatusCodes._
import com.typesafe.config.ConfigFactory
import scala.io.StdIn
import com.beust.jcommander._
import com.typesafe.scalalogging.LazyLogging
import scala.xml.XML
import XML._
import akka.http.scaladsl.marshallers.xml.ScalaXmlSupport._
object Args {
@Parameter(names = Array("-h", "--help"), help = true)
var help: Boolean = false
}
object Server extends LazyLogging {
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val ec = system.dispatcher
val route =
logRequestResult("example-server") {
pathEndOrSingleSlash {
get {
complete(<h1>you have reached the example server</h1>)
}
} ~ path("echo") {
get {
extractRequest { req =>
complete(req.toString)
}
}
} ~ post {
complete("POST succeeded")
}
}
def main(args: Array[String]): Unit = {
val j = new JCommander(Args, args.toArray: _*)
if (Args.help) {
val sb = new java.lang.StringBuilder()
j.setProgramName("crmauth")
j.usage(sb) // only way to get pre-formatted usage info
sb.append("An application.conf can be use to specify some parameters.")
println(sb.toString)
system.terminate()
return
}
val config = ConfigFactory.load()
val ip = config.getString("http.host")
val port = config.getInt("http.port")
val server = ip + ":" + port
val binding = Http().bindAndHandle(route, ip, port)
binding onFailure {
case ex: Exception =>
logger.error(s"Error binding $server", ex)
system.terminate()
return
}
println(s"Started server on $server.\nPress ENTER to stop.")
StdIn.readLine()
binding flatMap { _.unbind() } onComplete { _ => system.terminate() }
}
}Last updated