package org.intrace.client.gui.helper; import java.io.IOException; import java.io.ObjectInputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import org.intrace.shared.SerializationHelper; public class NetworkDataReceiverThread implements Runnable { public static interface INetworkOutputConfig { public boolean isNetOutputEnabled(); } private final Socket traceSocket; private final INetworkOutputConfig outputConfig; private final TraceFilterThread traceThread; public NetworkDataReceiverThread(InetAddress address, int networkTracePort, INetworkOutputConfig outputConfig, TraceFilterThread traceThread) throws IOException { this.outputConfig = outputConfig; this.traceThread = traceThread; traceSocket = new Socket(); traceSocket.connect(new InetSocketAddress(address, networkTracePort)); } public void start() { Thread t = new Thread(this); t.setDaemon(true); t.setName("Network Data Receiver"); t.start(); } @Override public void run() { try { ObjectInputStream objIn = new ObjectInputStream( traceSocket .getInputStream()); while (true) { Object data = objIn.readObject(); if (data instanceof String) { String traceLine = (String) data; if (!"NOOP".equals(traceLine)) { if (outputConfig.isNetOutputEnabled()) { traceThread.addTraceLine(traceLine); } } } else if ( data instanceof byte[]) { String[] myObj1 = SerializationHelper.fromWire( (byte[])data); for(String s : myObj1) traceThread.addTraceLine(s); } } } catch (Exception e) { disconnect(); } } public void disconnect() { try { traceSocket.close(); } catch (IOException e) { // Do nothing } } }