1 46 package groovy.ui; 47 48 import groovy.lang.GroovyShell; 49 import groovy.lang.Script; 50 51 import java.io.BufferedReader ; 52 import java.io.FileInputStream ; 53 import java.io.IOException ; 54 import java.io.InputStreamReader ; 55 import java.io.PrintWriter ; 56 import java.net.InetAddress ; 57 import java.net.ServerSocket ; 58 import java.net.Socket ; 59 import java.net.URL ; 60 61 65 66 public class GroovySocketServer implements Runnable { 67 private URL url; 68 private GroovyShell groovy; 69 private boolean isScriptFile; 70 private String scriptFilenameOrText; 71 private boolean autoOutput; 72 73 public GroovySocketServer(GroovyShell groovy, boolean isScriptFile, String scriptFilenameOrText, boolean autoOutput, int port) { 74 this.groovy = groovy; 75 this.isScriptFile = isScriptFile; 76 this.scriptFilenameOrText = scriptFilenameOrText; 77 this.autoOutput = autoOutput; 78 try { 79 url = new URL ("http", InetAddress.getLocalHost().getHostAddress(), port, "/"); 80 System.out.println("groovy is listening on port " + port); 81 } catch (IOException e) { 82 e.printStackTrace(); 83 } 84 new Thread (this).start(); 85 } 86 87 public void run() { 88 try { 89 ServerSocket serverSocket = new ServerSocket (url.getPort()); 90 while (true) { 91 Script script; 96 if (isScriptFile) { 97 GroovyMain gm = new GroovyMain(); 98 script = groovy.parse(new FileInputStream (gm.huntForTheScriptFile(scriptFilenameOrText))); 99 } else { 100 script = groovy.parse(scriptFilenameOrText); 101 } 102 new GroovyClientConnection(script, autoOutput, serverSocket.accept()); 103 } 104 } catch (Exception e) { 105 e.printStackTrace(); 106 } 107 } 108 109 class GroovyClientConnection implements Runnable { 110 private Script script; 111 private Socket socket; 112 private BufferedReader reader; 113 private PrintWriter writer; 114 private boolean autoOutputFlag; 115 116 GroovyClientConnection(Script script, boolean autoOutput,Socket socket) throws IOException { 117 this.script = script; 118 this.autoOutputFlag = autoOutput; 119 this.socket = socket; 120 reader = new BufferedReader (new InputStreamReader (socket.getInputStream())); 121 writer = new PrintWriter (socket.getOutputStream()); 122 new Thread (this, "Groovy client connection - " + socket.getInetAddress().getHostAddress()).start(); 123 } 124 public void run() { 125 try { 126 String line = null; 127 script.setProperty("out", writer); 128 script.setProperty("socket", socket); 129 script.setProperty("init", Boolean.TRUE); 130 while ((line = reader.readLine()) != null) { 131 script.setProperty("line", line); 133 Object o = script.run(); 134 script.setProperty("init", Boolean.FALSE); 135 if (o != null) { 136 if ("success".equals(o)) { 137 break; } else { 139 if (autoOutputFlag) { 140 writer.println(o); 141 } 142 } 143 } 144 writer.flush(); 145 } 146 } catch (IOException e) { 147 e.printStackTrace(); 148 } finally { 149 try { 150 writer.flush(); 151 writer.close(); 152 } finally { 153 try { 154 socket.close(); 155 } catch (IOException e3) { 156 e3.printStackTrace(); 157 } 158 } 159 } 160 } 161 } 162 } 163 | Popular Tags |