|
Play Framework/Scala example source code file (Server.scala)
The Server.scala Play Framework example source code
/*
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
*/
package play.core.server
import scala.language.postfixOps
import play.api._
import play.core._
import play.api.mvc._
import scala.concurrent.duration._
import scala.util.{ Try, Success, Failure }
import scala.util.control.NonFatal
import scala.concurrent.Future
trait WebSocketable {
def getHeader(header: String): String
def check: Boolean
}
/**
* provides generic server behaviour for Play applications
*/
trait Server {
// First delete the default log file for a fresh start (only in Dev Mode)
try {
if (mode == Mode.Dev) new java.io.File(applicationProvider.path, "logs/application.log").delete()
} catch {
case NonFatal(_) =>
}
// Configure the logger for the first time
Logger.configure(
Map("application.home" -> applicationProvider.path.getAbsolutePath),
mode = mode)
val bodyParserTimeout = {
//put in proper config
1 second
}
def mode: Mode.Mode
def getHandlerFor(request: RequestHeader): Either[Future[Result], (RequestHeader, Handler, Application)] = {
import scala.util.control.Exception
def sendHandler: Try[(RequestHeader, Handler, Application)] = {
try {
applicationProvider.get.map { application =>
application.global.onRequestReceived(request) match {
case (requestHeader, handler) => (requestHeader, handler, application)
}
}
} catch {
case e: ThreadDeath => throw e
case e: VirtualMachineError => throw e
case e: Throwable => Failure(e)
}
}
def logExceptionAndGetResult(e: Throwable) = {
Logger.error(
"""
|
|! %sInternal server error, for (%s) [%s] ->
|""".stripMargin.format(e match {
case p: PlayException => "@" + p.id + " - "
case _ => ""
}, request.method, request.uri),
e)
DefaultGlobal.onError(request, e)
}
Exception
.allCatch[Option[Future[Result]]]
.either(applicationProvider.handleWebCommand(request).map(Future.successful))
.left.map(logExceptionAndGetResult)
.right.flatMap(maybeResult => maybeResult.toLeft(())).right.flatMap { _ =>
sendHandler match {
case Failure(e) => Left(logExceptionAndGetResult(e))
case Success(v) => Right(v)
}
}
}
def applicationProvider: ApplicationProvider
def stop() {
Logger.shutdown()
}
}
Other Play Framework source code examplesHere is a short list of links related to this Play Framework Server.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.