public void service()

in browser/src/main/java/org/netbeans/html/presenters/browser/Browser.java [347:462]


        public <Request, Response> void service(HttpServer<Request, Response, ?, ?> server, Request rqst, Response rspns) throws IOException {
            String path = server.getRequestURI(rqst);
            cors(server, rspns);
            if ("OPTIONS".equals(server.getMethod(rqst))) { // NOI18N
                server.setStatus(rspns, 204);
                server.addHeader(rspns, "Allow", "OPTIONS, GET, HEAD, POST, PUT"); // NOI18N
                return;
            }
            if ("/".equals(path) || "index.html".equals(path)) {
                Reader is;
                String prefix = "http://" + server.getServerName(rqst) + ":" + server.getServerPort(rqst) + "/";
                Writer w = server.getWriter(rspns);
                server.setContentType(rspns, "text/html");
                final Command cmd = new Command(server, Browser.this, prefix);
                try {
                    is = new InputStreamReader(page.openStream());
                } catch (IOException ex) {
                    w.write("<html><body>");
                    w.write("<h1>Browser</h1>");
                    w.write("<pre id='cmd'></pre>");
                    emitScript(w, prefix, cmd.id);
                    w.write("</body></html>");
                    w.close();
                    return;
                }
                SESSIONS.put(cmd.id, cmd);
                int state = 0;
                for (;;) {
                    int ch = is.read();
                    if (ch == -1) {
                        break;
                    }
                    char lower = Character.toLowerCase((char)ch);
                    switch (state) {
                        case 1000: break;
                        case 0: if (lower == '<') state = 1; break;
                        case 1: if (lower == 'b') state = 2;
                            else if (lower != ' ' && lower != '\n') state = 0;
                            break;
                        case 2: if (lower == 'o') state = 3; else state = 0; break;
                        case 3: if (lower == 'd') state = 4; else state = 0; break;
                        case 4: if (lower == 'y') state = 5; else state = 0; break;
                        case 5: if (lower == '>') state = 500;
                            else if (lower != ' ' && lower != '\n') state = 0;
                            break;
                    }
                    w.write((char)ch);
                    if (state == 500) {
                        emitScript(w, prefix, cmd.id);
                        state = 1000;
                    }
                }
                if (state != 1000) {
                    emitScript(w, prefix, cmd.id);
                }
                is.close();
                w.close();
            } else if (path.equals("/command.js")) {
                String id = server.getParameter(rqst, "id");
                Command c = SESSIONS.get(id);
                if (c == null) {
                    server.getWriter(rspns).write("No command for " + id);
                    server.setStatus(rspns, 404);
                    return;
                }
                c.service(rqst, rspns);
            } else {
                if (path.startsWith("/")) {
                    path = path.substring(1);
                }
                URL relative = new URL(page, path);
                InputStream is;
                URLConnection conn;
                try {
                    conn = relative.openConnection();
                    is = conn.getInputStream();
                } catch (FileNotFoundException ex) {
                    server.setStatus(rspns, 404);
                    return;
                }
                String found = null;
                if (relative.getProtocol().equals("file")) {
                    try {
                        File file = new File(relative.toURI());
                        found = Files.probeContentType(file.toPath());
                    } catch (URISyntaxException | IOException ignore) {
                    }
                } else {
                    found = conn.getContentType();
                }
                if (found == null || "content/unknown".equals(found)) {
                    if (path.endsWith(".html")) {
                        found = "text/html";
                    }
                    if (path.endsWith(".js")) {
                        found = "text/javascript";
                    }
                    if (path.endsWith(".css")) {
                        found = "text/css";
                    }
                }
                if (found != null) {
                    server.setContentType(rspns, found);
                }
                OutputStream out = server.getOutputStream(rspns);
                for (;;) {
                    int b = is.read();
                    if (b == -1) {
                        break;
                    }
                    out.write(b);
                }
                out.close();
                is.close();
            }
        }