package org.teachingextensions.virtualproctor; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.teachingextensions.approvals.lite.util.MySystem; import org.teachingextensions.approvals.lite.util.ThreadLauncher; import org.teachingextensions.approvals.lite.util.ThreadUtils; import org.teachingextensions.approvals.lite.util.lambda.Action0; import javax.imageio.ImageIO; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.*; import java.net.URISyntaxException; import java.net.URL; public class VirtualProctorWeb extends WindowAdapter { private boolean finished = false; @Override public void windowClosing(WindowEvent event) { final BufferedImage scaled = ScreenCapture.getScaledImageOf(event.getComponent(), 200, 150); ThreadLauncher.launch(new Action0() { @Override public void call() { sendImageToWeb(scaled); finished = true; } }); } public void sendImageToDisk(BufferedImage image) throws IOException { String filename = "C:\\temp\\VirtualProctor.png"; ImageIO.write(image, "png", new File(filename)); } @Override public void windowClosed(WindowEvent e) { while (!finished) { ThreadUtils.sleep(50); } } public void sendImageToWeb(BufferedImage image) { sendToWeb(image); } private void sendToWeb(BufferedImage image) { try { URL url = new URL("http://steady-fin-94022.appspot.com/screenshots"); postImageToUrl(image, url); } catch (Exception e) { MySystem.event(e.getMessage()); } } private void postImageToUrl(BufferedImage image, URL url) throws URISyntaxException, IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost uploadFile = new HttpPost(url.toURI()); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "png", baos); InputStream is = new ByteArrayInputStream(baos.toByteArray()); builder .addBinaryBody("file", is, ContentType.APPLICATION_OCTET_STREAM, VirtualProctor.internals.getFullName()); HttpEntity multipart = builder.build(); uploadFile.setEntity(multipart); HttpResponse response = httpClient.execute(uploadFile); if (response.getStatusLine().getStatusCode() == 204) { MySystem.event("we've got it!"); } else { MySystem.event("oh no, the internet ate your screenshot!"); } } }