package net.tomp2p; import java.io.IOException; import net.tomp2p.connection.ChannelCreator; import net.tomp2p.connection.ConnectionConfiguration; import net.tomp2p.connection.DefaultConnectionConfiguration; import net.tomp2p.futures.FutureChannelCreator; import net.tomp2p.futures.FutureResponse; import net.tomp2p.p2p.Peer; import net.tomp2p.p2p.PeerBuilder; import net.tomp2p.peers.Number160; import net.tomp2p.peers.PeerAddress; import net.tomp2p.rpc.PingRPC; public class Pings { private static Peer receiver = null; public static void startJavaPingReceiver() throws IOException, InterruptedException { // setup a receiver, write it's address to hard-disk and notify via System.out try { receiver = new PeerBuilder(new Number160("0x1234")).p2pId(55).ports(7777).start(); byte[] result = receiver.peerAddress().toByteArray(); InteropUtil.writeToFile("JavaServerAddress", result); System.out.println("[---RESULT-READY---]"); } catch (Exception ex) { System.err.println("Exception during startJavaPingReceiver."); stopJavaPingReceiver(); throw ex; } } public static void stopJavaPingReceiver() throws InterruptedException { if (receiver != null) { receiver.shutdown().await(); } } public static byte[] pingDotNet(String argument, boolean isUdp) throws IOException, InterruptedException { // read .NET server address from harddisk byte[] bytes = InteropUtil.readFromFile(argument); PeerAddress serverAddress = new PeerAddress(bytes); // prepare a connection config that allows for longer short-lived connections ("debugging") ConnectionConfiguration config = new DefaultConnectionConfiguration(). idleTCPSeconds(60). idleUDPSeconds(60); // setup sender and ping .NET server Peer sender = null; ChannelCreator cc = null; try { sender = new PeerBuilder(new Number160("0x9876")).p2pId(55).ports(2424).start(); PingRPC handshake = new PingRPC(sender.peerBean(), sender.connectionBean()); FutureChannelCreator fcc; if (isUdp) { fcc = sender.connectionBean().reservation().create(1, 0); } else { fcc = sender.connectionBean().reservation().create(0, 1); } fcc.awaitUninterruptibly(); cc = fcc.channelCreator(); FutureResponse fr; if (isUdp) { fr = handshake.pingUDP(serverAddress, cc, config); } else { fr = handshake.pingTCP(serverAddress, cc, config); } fr.awaitUninterruptibly(); // check and return result of test boolean t1 = fr.isSuccess(); return new byte[] { t1 ? (byte) 1 : (byte) 0 }; } finally { if (cc != null) { cc.shutdown().await(); } if (sender != null) { sender.shutdown().await(); } } } }