launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
branchlauncher
changeset 332 6949044415df
parent 331 7328b7ba2fa4
child 342 60f9aad12731
     1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java	Sat Dec 15 22:46:26 2012 +0100
     1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java	Sun Dec 16 20:11:18 2012 +0100
     1.3 @@ -44,8 +44,11 @@
     1.4          final ClassLoader loader = Bck2BrwsrLauncher.class.getClassLoader();
     1.5          
     1.6          final ServerConfiguration conf = server.getServerConfiguration();
     1.7 -        conf.addHttpHandler(new Console("org.apidesign.bck2brwsr.launcher.Console", "welcome", "false"), "/console");
     1.8 +        conf.addHttpHandler(new Page("console.xhtml", 
     1.9 +            "org.apidesign.bck2brwsr.launcher.Console", "welcome", "false"
    1.10 +        ), "/console");
    1.11          conf.addHttpHandler(new VM(loader), "/bck2brwsr.js");
    1.12 +        conf.addHttpHandler(new VMInit(), "/vm.js");
    1.13          conf.addHttpHandler(new Classes(loader), "/classes/");
    1.14          conf.addHttpHandler(new HttpHandler() {
    1.15              @Override
    1.16 @@ -62,13 +65,25 @@
    1.17                  InputStream is = Bck2BrwsrLauncher.class.getResourceAsStream("console.xhtml");
    1.18                  copyStream(is, os, clazz, method, "true");
    1.19              }
    1.20 -        }, "/execute");
    1.21 +        }, "/");
    1.22 +        conf.addHttpHandler(new HttpHandler() {
    1.23 +            int cnt;
    1.24 +            @Override
    1.25 +            public void service(Request request, Response response) throws Exception {
    1.26 +                response.getWriter().write("{"
    1.27 +                    + "className: 'org.apidesign.bck2brwsr.launcher.Console',"
    1.28 +                    + "methodName: 'welcome',"
    1.29 +                    + "request: " + cnt
    1.30 +                    + "}");
    1.31 +            }
    1.32 +        }, "execute/data");
    1.33 +        conf.addHttpHandler(new Page("harness.xhtml"), "/execute");
    1.34          
    1.35          server.start();
    1.36          NetworkListener listener = server.getListeners().iterator().next();
    1.37          int port = listener.getPort();
    1.38          
    1.39 -        URI uri = new URI("http://localhost:" + port + "/execute?class=org.apidesign.bck2brwsr.launcher.Console&method=welcome");
    1.40 +        URI uri = new URI("http://localhost:" + port + "/execute");
    1.41          try {
    1.42              Desktop.getDesktop().browse(uri);
    1.43          } catch (UnsupportedOperationException ex) {
    1.44 @@ -98,10 +113,12 @@
    1.45          }
    1.46      }
    1.47  
    1.48 -    private static class Console extends HttpHandler {
    1.49 +    private static class Page extends HttpHandler {
    1.50 +        private final String resource;
    1.51          private final String[] args;
    1.52          
    1.53 -        public Console(String... args) {
    1.54 +        public Page(String resource, String... args) {
    1.55 +            this.resource = resource;
    1.56              this.args = args;
    1.57          }
    1.58  
    1.59 @@ -109,7 +126,7 @@
    1.60          public void service(Request request, Response response) throws Exception {
    1.61              response.setContentType("text/html");
    1.62              OutputStream os = response.getOutputStream();
    1.63 -            InputStream is = Bck2BrwsrLauncher.class.getResourceAsStream("console.xhtml");
    1.64 +            InputStream is = Bck2BrwsrLauncher.class.getResourceAsStream(resource);
    1.65              copyStream(is, os, args);
    1.66          }
    1.67      }
    1.68 @@ -128,6 +145,25 @@
    1.69              Bck2Brwsr.generate(response.getWriter(), loader);
    1.70          }
    1.71      }
    1.72 +    private static class VMInit extends HttpHandler {
    1.73 +        public VMInit() {
    1.74 +        }
    1.75 +
    1.76 +        @Override
    1.77 +        public void service(Request request, Response response) throws Exception {
    1.78 +            response.setCharacterEncoding("UTF-8");
    1.79 +            response.setContentType("text/javascript");
    1.80 +            response.getWriter().append(
    1.81 +                "function ldCls(res) {\n"
    1.82 +                + "  var request = new XMLHttpRequest();\n"
    1.83 +                + "  request.open('GET', 'classes/' + res, false);\n"
    1.84 +                + "  request.send();\n"
    1.85 +                + "  var arr = eval('(' + request.responseText + ')');\n"
    1.86 +                + "  return arr;\n"
    1.87 +                + "}\n"
    1.88 +                + "var vm = new bck2brwsr(ldCls);\n");
    1.89 +        }
    1.90 +    }
    1.91  
    1.92      private static class Classes extends HttpHandler {
    1.93          private final ClassLoader loader;