diff --git a/src/com/t_oster/liblasercut/drivers/IModelaMill.java b/src/com/t_oster/liblasercut/drivers/IModelaMill.java index 7a3f9cc5f9cad91753e1fa6692a28811a886b720..f78d9e70d97ed091bdde36fba220644e00b41d09 100644 --- a/src/com/t_oster/liblasercut/drivers/IModelaMill.java +++ b/src/com/t_oster/liblasercut/drivers/IModelaMill.java @@ -29,12 +29,16 @@ import com.t_oster.liblasercut.VectorCommand; import com.t_oster.liblasercut.VectorPart; import com.t_oster.liblasercut.platform.Util; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.URI; +import java.net.URISyntaxException; import java.util.Arrays; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; /** * @@ -43,6 +47,12 @@ import java.util.logging.Logger; public class IModelaMill extends LaserCutter { + private static String HOSTNAME = "Hostname/IP"; + private static String PORT = "port"; + + private String hostname = "localhost"; + private int port = 5000; + private void writeInitializationCode(PrintStream out) { out.println("%"); @@ -102,8 +112,6 @@ public class IModelaMill extends LaserCutter return new IModelaProperty(); } - - @Override public void sendJob(LaserJob job, ProgressListener pl, List<String> warnings) throws IllegalJobException, Exception { @@ -127,10 +135,9 @@ public class IModelaMill extends LaserCutter writeFinalizationCode(out); pl.progressChanged(this, 50); pl.taskChanged(this, "sending..."); - sendGCode(result.toByteArray()); + sendGCode(result.toByteArray(), pl, warnings); pl.progressChanged(this, 100); pl.taskChanged(this, "done"); - warnings.add("WARNING: THE iModela driver only outputs to command line"); } @Override @@ -171,29 +178,57 @@ public class IModelaMill extends LaserCutter @Override public String[] getPropertyKeys() { - return new String[0]; + return new String[]{HOSTNAME, PORT}; } @Override public void setProperty(String key, Object value) { + if (HOSTNAME.equals(key)) + { + hostname = (String) value; + } + else if (PORT.equals(key)) + { + port = (Integer) value; + } } @Override public Object getProperty(String key) { + if (HOSTNAME.equals(key)) + { + return hostname; + } + else if (PORT.equals(key)) + { + return (Integer) port; + } return null; } - private void sendGCode(byte[] toByteArray) + private void sendGCode(byte[] gcode, ProgressListener pl, List<String> warnings) throws IOException, URISyntaxException { - try + pl.taskChanged(this, "connecting..."); + if ("stdout".equals(hostname)) + { + pl.taskChanged(this, "sending..."); + System.out.write(gcode); + } + else if (hostname.startsWith("file://")) { - System.out.write(toByteArray); + PrintStream w = new PrintStream(new FileOutputStream(new File(new URI(hostname)))); + pl.taskChanged(this, "sending..."); + w.write(gcode); } - catch (IOException ex) + else { - Logger.getLogger(IModelaMill.class.getName()).log(Level.SEVERE, null, ex); + Socket s = new Socket(); + s.connect(new InetSocketAddress(hostname, port), 3000); + pl.taskChanged(this, "sending..."); + s.getOutputStream().write(gcode); + s.close(); } }