public void startSession(String id, PrintWriter writer) { SlaveBrowser browser = capturedBrowsers.getBrowser(id); Lock lock = locks.get(id); String sessionId = UUID.randomUUID().toString(); if (lock.tryLock(sessionId)) { writer.write(sessionId); } else { // session is probably staled if ((!browser.isCommandRunning() && browser.peekCommand() == null) || ((new Date().getTime() - lock.getLastHeartBeat()) > HEARTBEAT_TIMEOUT)) { lock.forceUnlock(); SlaveBrowser slaveBrowser = capturedBrowsers.getBrowser(id); slaveBrowser.clearCommandRunning(); slaveBrowser.clearResponseQueue(); filesCache.clear(); writer.write(lock.tryLock(sessionId) ? sessionId : "FAILED"); } else { writer.write("FAILED"); } } writer.flush(); }
public void checkFileSet(String fileSet, String browserId, PrintWriter writer) { Collection<FileInfo> clientFileSet = gson.fromJson(fileSet, new TypeToken<Collection<FileInfo>>() {}.getType()); SlaveBrowser browser = capturedBrowsers.getBrowser(browserId); // Hack by ppershing: always reload all files, as there might be dependencies // between sources and tests which must be loaded in order! Set<FileInfo> browserFileSet = new HashSet<FileInfo>(); // browser.getFileSet(); Set<FileInfo> filesToRequest = strategy.createExpiredFileSet(clientFileSet, browserFileSet); if (!filesToRequest.isEmpty()) { if (browser.getBrowserInfo().getName().contains("Safari") || browser.getBrowserInfo().getName().contains("Opera") || browser.getBrowserInfo().getName().contains("Konqueror")) { filesToRequest.clear(); for (FileInfo info : clientFileSet) { filesToRequest.add(info); } } Set<FileInfo> filteredFilesToRequest = filterServeOnlyFiles(filesToRequest); writer.write(gson.toJson(filteredFilesToRequest)); } writer.flush(); }