@NbBundle.Messages({ "# {0} - project name", "InternalWebServer.output.title=Internal WebServer [{0}]" }) private Future<Integer> createProcess() { // validate PhpInterpreter phpInterpreter; try { phpInterpreter = PhpInterpreter.getDefault(); } catch (InvalidPhpExecutableException ex) { UiUtils.invalidScriptProvided(ex.getLocalizedMessage()); return null; } RunConfigInternal runConfig = RunConfigInternal.forProject(project); if (RunConfigInternalValidator.validateCustomizer(runConfig) != null) { PhpProjectUtils.openCustomizerRun(project); return null; } // run return new PhpExecutable(phpInterpreter.getInterpreter()) .viaAutodetection(false) .viaPhpInterpreter(false) .workDir(runConfig.getWorkDir()) .additionalParameters(getParameters(runConfig)) .displayName(Bundle.InternalWebServer_output_title(project.getName())) .run(getDescriptor()); }
private List<String> getParameters(RunConfigInternal runConfig) { List<String> params = new ArrayList<String>(3); params.add(WEB_SERVER_PARAM); params.add(runConfig.getServer()); String relativeDocumentRoot = runConfig.getRelativeDocumentRoot(); if (relativeDocumentRoot != null) { params.add(DOCUMENT_ROOT_PARAM); params.add(relativeDocumentRoot); } String routerRelativePath = runConfig.getRouterRelativePath(); if (StringUtils.hasText(routerRelativePath)) { params.add(routerRelativePath); } return params; }
@NbBundle.Messages({ "# {0} - project name", "InternalWebServer.stopping=Stopping PHP built-in web server for project {0}..." }) @SuppressWarnings("SleepWhileHoldingLock") private static boolean ensureServerStopped(InternalWebServer instance) { assert !EventQueue.isDispatchThread(); ProgressHandle progressHandle = ProgressHandleFactory.createHandle( Bundle.InternalWebServer_stopping(instance.project.getName())); try { progressHandle.start(); // stop server instance.stop(); // wait for shutdown RunConfigInternal runConfig = RunConfigInternal.forProject(instance.project); String host = runConfig.getHostname(); int port = Integer.valueOf(runConfig.getPort()); for (int i = 0; i < 20; ++i) { try { Socket socket = new Socket(host, port); socket.close(); Thread.sleep(200); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } catch (UnknownHostException ex) { return true; } catch (IOException ex) { return true; } } return false; } finally { progressHandle.finish(); } }