Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ul.netx
- import javax.servlet.http.{HttpServletRequest, HttpServletResponse, HttpServletRequestWrapper};
- import java.net.{InetSocketAddress, InetAddress};
- import org.eclipse.{jetty};
- import scala.collection.JavaConversions._;
- /// ipPort - port to listen, staticDir - directory with static content,
- /// shutdownTime - exit timeout (sec) if no requests received (=1 - never exit)
- /// callback - response callback function (returns true if request is served)
- class ServerJetty(ipPort:Int, staticDir:String, shutdownTime:Int,
- callback:(String,jetty.server.Request,HttpServletRequest,HttpServletResponse)=>Boolean) {
- val _server = this;
- val server = new jetty.server.Server(ipPort);
- // start shutdown timeout timer
- if (shutdownTime > 0) {
- val shutdownCounter = new java.util.concurrent.atomic.AtomicInteger(0);
- val shutdownTimer = new java.util.Timer() {
- scheduleAtFixedRate(new java.util.TimerTask() {
- def run = {
- if (shutdownTime > 0) {
- if (shutdownCounter.incrementAndGet == shutdownTime) {
- println("Shutdown timeout !");
- (new java.util.Timer).schedule(new java.util.TimerTask {
- def run = _server.stop(0);
- }, 1000)
- }
- }
- }
- }, 1000, 1000);
- }
- }
- // add static and dynamic content handlers
- server.setHandler(
- new jetty.server.handler.HandlerList {
- setHandlers(Array(
- //static resources
- new jetty.server.handler.ResourceHandler {
- setResourceBase(staticDir);
- },
- //dynamic data
- new jetty.server.handler.DefaultHandler {
- override def handle(target:String, baseRequest:jetty.server.Request, request:HttpServletRequest, response:HttpServletResponse):Unit = {
- try {
- if (!callback(target,baseRequest,request,response))
- super.handle(target, baseRequest, request, response);
- } catch { case _:Throwable => }
- }
- }
- ))
- }
- )
- // start server
- def start:ServerJetty = {
- server.start;
- server.join;
- this
- }
- // stop server after delay (=0 to exit immediately)
- def stop(delay:Int):Unit = {
- if (delay == 0) server.stop;
- }
- def isStarted = server.isStarted;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement