package colloid.http; import net.jxta.exception.PeerGroupException; import net.jxta.peergroup.PeerGroup; import net.jxta.platform.NetworkManager; import net.jxta.protocol.PipeAdvertisement; import net.jxta.socket.JxtaSocket; import java.io.*; import java.util.ArrayDeque; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; import java.text.MessageFormat; import colloid.App; public class PeerClient { private transient NetworkManager manager = null; private transient PeerGroup netPeerGroup = null; private transient PipeAdvertisement pipeAdv; private transient boolean waitForRendezvous = false; protected ArrayDeque<String> logdata = new ArrayDeque<String>(); public PeerClient(boolean waitForRendezvous) { try { manager = new NetworkManager(NetworkManager.ConfigMode.ADHOC, "SocketClient", new File(new File(".cache"), "SocketClient").toURI()); start(); } catch (Exception e) { App.getLogger().log(Level.SEVERE, e.toString()); e.printStackTrace(); } netPeerGroup = manager.getNetPeerGroup(); pipeAdv = PeerServer.createSocketAdvertisement("1"); if (waitForRendezvous) { manager.waitForRendezvousConnection(0); } } /** * Interact with the server. */ public void send(final String log) { logdata.add(log); } public void send() { sendLogdata("hallo"); } public void run() { Thread.currentThread().setName(PeerClient.class.getName() + ".send()"); new Thread(new Runnable() { @Override public void run() { while (true) { String log = logdata.poll(); if (log != null) { sendLogdata(log); } } } }).start(); } protected void sendLogdata(String logdata) { System.out.println(String.format("Sending log data: %s", logdata)); try { if (waitForRendezvous) { manager.waitForRendezvousConnection(0); } System.out.println("Connecting to the server"); JxtaSocket socket = new JxtaSocket(netPeerGroup, // no specific peerid null, pipeAdv, // connection timeout: 5 seconds(5000) 1000, // reliable connection true); // get the socket output stream OutputStream out = socket.getOutputStream(); DataOutput dos = new DataOutputStream(out); // get the socket input stream InputStream in = socket.getInputStream(); DataInput dis = new DataInputStream(in); dos.writeUTF(logdata); out.flush(); out.close(); in.close(); socket.close(); System.out.println("Socket connection closed"); } catch (IOException io) { io.printStackTrace(); } } public void stop() { manager.stopNetwork(); } public void start() { try { run(); manager.startNetwork(); } catch (PeerGroupException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static PeerClient init() { // System.setProperty("net.jxta.logging.Logging", "FINEST"); // System.setProperty("net.jxta.level", "FINEST"); // System.setProperty("java.util.logging.config.file", "logging.properties"); PeerClient socEx = null; try { Thread.currentThread().setName(PeerClient.class.getName() + ".main()"); String value = System.getProperty("RDVWAIT", "false"); boolean waitForRendezvous = Boolean.valueOf(value); socEx = new PeerClient(waitForRendezvous); } catch (Throwable e) { App.getLogger().log(Level.SEVERE, e.toString()); System.out.flush(); System.err.println("Failed : " + e); e.printStackTrace(System.err); } return socEx; } }