From ff0fdeff5a119128650a9d51c6346853a83ce638 Mon Sep 17 00:00:00 2001 From: Thomas Oster <thomas.oster@rwth-aachen.de> Date: Tue, 21 Jul 2015 23:37:09 +0200 Subject: [PATCH] Added (untested) HTTP Upload --- lib/corn-httpclient-1.0.12.jar | Bin 0 -> 24802 bytes nbproject/project.properties | 4 +- .../drivers/GenericGcodeDriver.java | 102 +++++++++++++++--- 3 files changed, 92 insertions(+), 14 deletions(-) create mode 100644 lib/corn-httpclient-1.0.12.jar diff --git a/lib/corn-httpclient-1.0.12.jar b/lib/corn-httpclient-1.0.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..84f0b546db05da5a14dbe7c293757ad890fadf01 GIT binary patch literal 24802 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 literal 0 HcmV?d00001 diff --git a/nbproject/project.properties b/nbproject/project.properties index 7a20d16..72619c6 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -44,6 +44,7 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.commons-net-3.1.jar=lib/commons-net-3.1.jar +file.reference.corn-httpclient-1.0.12.jar=lib/corn-httpclient-1.0.12.jar file.reference.GLPKSolverPack.jar=lib/GLPKSolverPack.jar file.reference.jna-4.0.0.jar=lib/jna-4.0.0.jar file.reference.js.jar=lib/js.jar @@ -59,7 +60,8 @@ javac.classpath=\ ${file.reference.GLPKSolverPack.jar}:\ ${file.reference.SCPSolver.jar}:\ ${file.reference.jna-4.0.0.jar}:\ - ${file.reference.purejavacomm-0.0.22.jar} + ${file.reference.purejavacomm-0.0.22.jar}:\ + ${file.reference.corn-httpclient-1.0.12.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/src/com/t_oster/liblasercut/drivers/GenericGcodeDriver.java b/src/com/t_oster/liblasercut/drivers/GenericGcodeDriver.java index df04f53..1b1463c 100644 --- a/src/com/t_oster/liblasercut/drivers/GenericGcodeDriver.java +++ b/src/com/t_oster/liblasercut/drivers/GenericGcodeDriver.java @@ -21,14 +21,20 @@ package com.t_oster.liblasercut.drivers; import com.t_oster.liblasercut.*; import com.t_oster.liblasercut.platform.Util; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.net.Socket; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import purejavacomm.*; import java.util.*; +import net.sf.corn.httpclient.HttpClient; +import net.sf.corn.httpclient.HttpResponse; /** * This class implements a driver for a generic GRBL GCode Lasercutter. @@ -43,13 +49,40 @@ public class GenericGcodeDriver extends LaserCutter { protected static final String SETTING_COMPORT = "COM Port"; protected static final String SETTING_BEDWIDTH = "Laserbed width"; protected static final String SETTING_BEDHEIGHT = "Laserbed height"; + protected static final String SETTING_HTTP_UPLOAD_URL = "HTTP Upload URL"; protected static final String SETTING_MAX_SPEED = "Max speed (in mm/min)"; protected static final String SETTING_PRE_JOB_GCODE = "Pre-Job GCode (comma separated)"; protected static final String SETTING_POST_JOB_GCODE = "Post-Job GCode (comma separated)"; + protected static final String SETTING_RESOLUTIONS = "Supported DPI (comma separated)"; protected static final String SETTING_IDENTIFICATION_STRING = "Board Identification String"; protected static final String SETTING_WAIT_FOR_OK = "Wait for OK after each line (interactive mode)"; protected static final String LINEEND = "\r\n"; + protected String httpUploadUrl = "http://10.10.10.100/upload"; + + public String getHttpUploadUrl() + { + return httpUploadUrl; + } + + public void setHttpUploadUrl(String httpUploadUrl) + { + this.httpUploadUrl = httpUploadUrl; + } + + protected String supportedResolutions = "100,500,1000"; + + public String getSupportedResolutions() + { + return supportedResolutions; + } + + public void setSupportedResolutions(String supportedResolutions) + { + this.resolutions = null; + this.supportedResolutions = supportedResolutions; + } + protected boolean waitForOKafterEachLine = true; public boolean isWaitForOKafterEachLine() @@ -252,6 +285,17 @@ public class GenericGcodeDriver extends LaserCutter { } } + protected void http_upload(URI url, String data, String filename) throws IOException + { + HttpClient client = new HttpClient(url); + client.putAdditionalRequestProperty("X-Filename", filename); + HttpResponse response = client.sendData(HttpClient.HTTP_METHOD.POST, data); + if (response == null || response.hasError()) + { + throw new IOException("Error during POST Request"); + } + } + protected String connect_serial(CommPortIdentifier i, ProgressListener pl) throws PortInUseException, IOException { pl.taskChanged(this, "opening '"+i.getName()+"'"); @@ -294,9 +338,13 @@ public class GenericGcodeDriver extends LaserCutter { return "Not a serial Port "+comport; } } - + /** + * Used to buffer the file before uploading via http + */ + private ByteArrayOutputStream outputBuffer; protected void connect(ProgressListener pl) throws IOException, PortInUseException, NoSuchPortException { + outputBuffer = null; if (getHost() != null && getHost().length() > 0) { socket = new Socket(); @@ -337,26 +385,42 @@ public class GenericGcodeDriver extends LaserCutter { throw new IOException(error); } } + else if (getHttpUploadUrl() != null && getHttpUploadUrl().length() > 0) + { + outputBuffer = new ByteArrayOutputStream(); + out = new PrintStream(outputBuffer); + setWaitForOKafterEachLine(false); + in = null; + } else { throw new IOException("Either COM Port or IP/Host has to be set"); } } - protected void disconnect() throws IOException + protected void disconnect() throws IOException, URISyntaxException { - in.close(); - out.close(); - if (this.socket != null) + if (outputBuffer != null) { - socket.close(); - socket = null; + out.close(); + http_upload(new URI(getHttpUploadUrl()), outputBuffer.toString("UTF-8"), "VisiCut.gcode"); } - else if (this.port != null) + else { - this.port.close(); - this.port = null; + in.close(); + out.close(); + if (this.socket != null) + { + socket.close(); + socket = null; + } + else if (this.port != null) + { + this.port.close(); + this.port = null; + } } + } @Override @@ -404,9 +468,11 @@ public class GenericGcodeDriver extends LaserCutter { @Override public List<Double> getResolutions() { if (resolutions == null) { - resolutions = Arrays.asList(new Double[]{ - 500d - }); + resolutions = new LinkedList<Double>(); + for (String s : getSupportedResolutions().split(",")) + { + resolutions.add(Double.parseDouble(s)); + } } return resolutions; } @@ -456,10 +522,12 @@ public class GenericGcodeDriver extends LaserCutter { SETTING_BEDHEIGHT, SETTING_COMPORT, SETTING_HOST, + SETTING_HTTP_UPLOAD_URL, SETTING_IDENTIFICATION_STRING, SETTING_MAX_SPEED, SETTING_PRE_JOB_GCODE, SETTING_POST_JOB_GCODE, + SETTING_RESOLUTIONS, SETTING_WAIT_FOR_OK }; @@ -480,6 +548,8 @@ public class GenericGcodeDriver extends LaserCutter { return this.getComport(); } else if (SETTING_HOST.equals(attribute)) { return this.getHost(); + } else if (SETTING_HTTP_UPLOAD_URL.equals(attribute)) { + return this.getHttpUploadUrl(); } else if (SETTING_IDENTIFICATION_STRING.equals(attribute)) { return this.getIdentificationLine(); } else if (SETTING_MAX_SPEED.equals(attribute)) { @@ -488,6 +558,8 @@ public class GenericGcodeDriver extends LaserCutter { return this.getPreJobGcode(); } else if (SETTING_POST_JOB_GCODE.equals(attribute)) { return this.getPostJobGcode(); + } else if (SETTING_RESOLUTIONS.equals(attribute)) { + return this.getResolutions(); } else if (SETTING_WAIT_FOR_OK.equals(attribute)) { return this.isWaitForOKafterEachLine(); } @@ -507,6 +579,8 @@ public class GenericGcodeDriver extends LaserCutter { this.setComport((String) value); } else if (SETTING_HOST.equals(attribute)) { this.setHost((String) value); + } else if (SETTING_HTTP_UPLOAD_URL.equals(attribute)) { + this.setHttpUploadUrl((String) value); } else if (SETTING_IDENTIFICATION_STRING.equals(attribute)) { this.setIdentificationLine((String) value); } else if (SETTING_MAX_SPEED.equals(attribute)) { @@ -515,6 +589,8 @@ public class GenericGcodeDriver extends LaserCutter { this.setPreJobGcode((String) value); } else if (SETTING_POST_JOB_GCODE.equals(attribute)) { this.setPostJobGcode((String) value); + } else if (SETTING_RESOLUTIONS.equals(attribute)) { + this.setSupportedResolutions((String) value); } else if (SETTING_WAIT_FOR_OK.equals(attribute)) { this.setWaitForOKafterEachLine((Boolean) value); } -- GitLab