| 63823 |      1 | /*  Title:      Pure/General/http_server.scala
 | 
|  |      2 |     Author:     Makarius
 | 
|  |      3 | 
 | 
|  |      4 | Minimal HTTP server.
 | 
|  |      5 | */
 | 
|  |      6 | 
 | 
|  |      7 | package isabelle
 | 
|  |      8 | 
 | 
|  |      9 | 
 | 
|  |     10 | import java.net.{InetAddress, InetSocketAddress}
 | 
|  |     11 | import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer}
 | 
|  |     12 | 
 | 
|  |     13 | 
 | 
|  |     14 | object HTTP_Server
 | 
|  |     15 | {
 | 
|  |     16 |   def apply(handler: HttpExchange => Unit): HTTP_Server =
 | 
|  |     17 |   {
 | 
|  |     18 |     val localhost = InetAddress.getByName("127.0.0.1")
 | 
|  |     19 | 
 | 
|  |     20 |     val server = HttpServer.create(new InetSocketAddress(localhost, 0), 0)
 | 
|  |     21 |     server.createContext("/", new HttpHandler { def handle(x: HttpExchange) { handler(x) } })
 | 
|  |     22 |     server.setExecutor(null)
 | 
|  |     23 |     new HTTP_Server(server)
 | 
|  |     24 |   }
 | 
|  |     25 | }
 | 
|  |     26 | 
 | 
|  |     27 | class HTTP_Server private(val server: HttpServer)
 | 
|  |     28 | {
 | 
|  |     29 |   def start: Unit = server.start
 | 
|  |     30 |   def stop: Unit = server.stop(0)
 | 
|  |     31 | 
 | 
|  |     32 |   def address: InetSocketAddress = server.getAddress
 | 
|  |     33 |   def url: String = "http://" + address.getHostName + ":" + address.getPort
 | 
|  |     34 |   override def toString: String = url
 | 
|  |     35 | }
 |