package com.google.gwt.dist.compiler.communicator.impl; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.logging.Level; import java.util.logging.Logger; import com.google.gwt.dist.Node; import com.google.gwt.dist.comm.CommMessage; import com.google.gwt.dist.comm.CommMessagePayload; import com.google.gwt.dist.comm.ProcessingResultPayload; import com.google.gwt.dist.comm.impl.ProcessingResultMessage; import com.google.gwt.dist.compiler.communicator.Communicator; public class CommunicatorImpl implements Communicator { private Socket client; private static final Logger logger = Logger .getLogger(CommunicatorImpl.class.getName()); public Socket getClient() { return this.client; } @Override public void sendData(byte[] data, Node node) { Socket server; try { server = new Socket(node.getIpaddress(), node.getPort()); InputStream is = server.getInputStream(); OutputStream os = server.getOutputStream(); os.write(data); server.shutdownOutput(); os.close(); is.close(); server.close(); } catch (UnknownHostException e) { } catch (IOException e) { } } @SuppressWarnings("unchecked") @Override public <T extends CommMessagePayload> T sendMessage(CommMessage<T> message, Node node) { try { Socket server = new Socket(node.getIpaddress(), node.getPort()); InputStream is = server.getInputStream(); OutputStream os = server.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(message); server.shutdownOutput(); ObjectInputStream ois = new ObjectInputStream(is); message = (CommMessage<T>) ois.readObject(); os.close(); is.close(); server.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return message.getResponse(); } @Override public byte[] retrieveData(ProcessingResultMessage message, Node node) { byte[] retrievedData = null; try { Socket server = new Socket(node.getIpaddress(), node.getPort()); OutputStream os = server.getOutputStream(); InputStream is = server.getInputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); oos.flush(); oos.writeObject(message); oos.flush(); ObjectInputStream ois = new ObjectInputStream(is); ProcessingResultMessage returnedMessage = (ProcessingResultMessage) ois .readObject(); ProcessingResultPayload returnedPayload = returnedMessage.getResponse(); retrievedData = returnedPayload.getResponseValue(); oos.close(); os.close(); ois.close(); is.close(); server.close(); } catch (UnknownHostException e) { logger.log(Level.SEVERE, e.getMessage()); } catch (IOException e) { logger.log(Level.SEVERE, e.getMessage()); } catch (ClassNotFoundException e) { e.printStackTrace(); } return retrievedData; } public void setClient(Socket client) { this.client = client; } }