Advertisement
edartuz

scala_server_jetty

Mar 23rd, 2013
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.59 KB | None | 0 0
  1. package ul.netx
  2.  
  3. import javax.servlet.http.{HttpServletRequest, HttpServletResponse, HttpServletRequestWrapper};
  4. import java.net.{InetSocketAddress, InetAddress};
  5. import org.eclipse.{jetty};
  6. import scala.collection.JavaConversions._;
  7.  
  8. /// ipPort - port to listen, staticDir - directory with static content,
  9. /// shutdownTime - exit timeout (sec) if no requests received (=1 - never exit)
  10. /// callback - response callback function (returns true if request is served)
  11. class ServerJetty(ipPort:Int, staticDir:String, shutdownTime:Int,
  12.         callback:(String,jetty.server.Request,HttpServletRequest,HttpServletResponse)=>Boolean) {
  13.     val _server = this;
  14.     val server = new jetty.server.Server(ipPort);
  15.    
  16.     // start shutdown timeout timer
  17.     if (shutdownTime > 0) {
  18.         val shutdownCounter = new java.util.concurrent.atomic.AtomicInteger(0);
  19.         val shutdownTimer = new java.util.Timer() {
  20.             scheduleAtFixedRate(new java.util.TimerTask() {
  21.                 def run = {
  22.                     if (shutdownTime > 0) {
  23.                         if (shutdownCounter.incrementAndGet == shutdownTime) {
  24. println("Shutdown timeout !");
  25.                             (new java.util.Timer).schedule(new java.util.TimerTask {
  26.                                 def run = _server.stop(0);
  27.                             }, 1000)
  28.                         }
  29.                     }
  30.                 }
  31.             }, 1000, 1000);
  32.         }
  33.     }
  34.    
  35.     // add static and dynamic content handlers
  36.     server.setHandler(
  37.         new jetty.server.handler.HandlerList {
  38.             setHandlers(Array(
  39.                 //static resources
  40.                 new jetty.server.handler.ResourceHandler {
  41.                     setResourceBase(staticDir);
  42.                 },
  43.                 //dynamic data
  44.                 new jetty.server.handler.DefaultHandler {
  45.                     override def handle(target:String, baseRequest:jetty.server.Request, request:HttpServletRequest, response:HttpServletResponse):Unit = {
  46.                         try {
  47.                             if (!callback(target,baseRequest,request,response))
  48.                                 super.handle(target, baseRequest, request, response);
  49.                         } catch { case _:Throwable => }
  50.                     }
  51.                 }
  52.             ))
  53.         }
  54.     )
  55.    
  56.     // start server
  57.     def start:ServerJetty = {
  58.         server.start;
  59.         server.join;
  60.         this
  61.     }
  62.  
  63.     // stop server after delay (=0 to exit immediately)
  64.     def stop(delay:Int):Unit = {
  65.         if (delay == 0) server.stop;
  66.     }
  67.    
  68.     def isStarted = server.isStarted;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement