src/Pure/General/http_server.scala
author wenzelm
Sun, 02 Oct 2016 21:05:14 +0200
changeset 63999 5649a993666d
parent 63823 ca8b737b08cf
child 65076 8a96ab58f016
permissions -rw-r--r--
more operations;

/*  Title:      Pure/General/http_server.scala
    Author:     Makarius

Minimal HTTP server.
*/

package isabelle


import java.net.{InetAddress, InetSocketAddress}
import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer}


object HTTP_Server
{
  def apply(handler: HttpExchange => Unit): HTTP_Server =
  {
    val localhost = InetAddress.getByName("127.0.0.1")

    val server = HttpServer.create(new InetSocketAddress(localhost, 0), 0)
    server.createContext("/", new HttpHandler { def handle(x: HttpExchange) { handler(x) } })
    server.setExecutor(null)
    new HTTP_Server(server)
  }
}

class HTTP_Server private(val server: HttpServer)
{
  def start: Unit = server.start
  def stop: Unit = server.stop(0)

  def address: InetSocketAddress = server.getAddress
  def url: String = "http://" + address.getHostName + ":" + address.getPort
  override def toString: String = url
}