Package net.tomp2p.examples

Source Code of net.tomp2p.examples.ExampleNATChat

package net.tomp2p.examples;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.Iterator;
import java.util.Random;

import net.tomp2p.connection.Bindings;
import net.tomp2p.dht.FutureGet;
import net.tomp2p.dht.PeerDHT;
import net.tomp2p.dht.PeerBuilderDHT;
import net.tomp2p.futures.FutureBootstrap;
import net.tomp2p.futures.FutureDiscover;
import net.tomp2p.p2p.PeerBuilder;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;
import net.tomp2p.storage.Data;

public class ExampleNATChat {
  private static int keyStore = 543453049;
  private static int serverPort = 4000;
  private static int clientPort = 4563;

  public void startServer(String addr) throws Exception {
    PeerDHT peer = null;
    try {
      Random r = new Random(42L);
      // peer.getP2PConfiguration().setBehindFirewall(true);
      Bindings b = new Bindings();
      // b.addInterface("eth0");
      b.addAddress(InetAddress.getByName(addr));
      // b.addAddress(InetAddress.getByAddress(addr));
      peer = new PeerBuilderDHT(new PeerBuilder(new Number160(r)).bindings(b).ports(serverPort).start()).start();
      System.out.println("peer started.");
      for (;;) {
        Thread.sleep(5000);
        FutureGet fg = peer.get(new Number160(keyStore)).all().start();
        fg.awaitUninterruptibly();
        int size = fg.dataMap().size();
        System.out.println("size " + size);
        Iterator<Data> iterator = fg.dataMap().values().iterator();
        while (iterator.hasNext()) {
          Data d = iterator.next();
          System.out.println("got: " + d.object().toString());
        }
      }
    } finally {
      peer.shutdown();
    }
  }

  public static void main(String[] args) throws Exception {
    if (args.length > 1 && args[0].equals("bootstrap")) {
      ExampleNATChat t = new ExampleNATChat();
      t.startServer(args[1]);
    } else if (args.length > 0) {
      startClientNAT(args[0]);
    } else {
      System.err.println("Must be called with:" + "\n\tNATChat bootstrap <ip>\t\t(supernode)\n\t"
              + "NATChat <bootstrap ip>\t\t(normal node).\n");
    }
  }

  public static void startClientNAT(String ip) throws Exception {
    Random r = new Random(43L);
    PeerDHT peer = new PeerBuilderDHT(new PeerBuilder(new Number160(r)).ports(clientPort).behindFirewall().start()).start();
    PeerAddress bootStrapServer = new PeerAddress(Number160.ZERO, InetAddress.getByName(ip), serverPort, serverPort);
    FutureDiscover fd = peer.peer().discover().peerAddress(bootStrapServer).start();
    System.out.println("About to wait...");
    fd.awaitUninterruptibly();
    if (fd.isSuccess()) {
      System.out.println("*** FOUND THAT MY OUTSIDE ADDRESS IS " + fd.peerAddress());
    } else {
      System.out.println("*** FAILED " + fd.failedReason());
    }

    bootStrapServer = fd.reporter();
    FutureBootstrap bootstrap = peer.peer().bootstrap().peerAddress(bootStrapServer).start();
    bootstrap.awaitUninterruptibly();
    if (!bootstrap.isSuccess()) {
      System.out.println("*** COULD NOT BOOTSTRAP!");
    } else {
      System.out.println("*** SUCCESSFUL BOOTSTRAP");
    }

    String inLine = null;
    while ((inLine = getLine()) != null) {
      if (inLine.equals("show")) {
        FutureGet fget = peer.get(new Number160(keyStore)).all().start();
        fget.awaitUninterruptibly();
        Iterator<Data> iterator = fget.dataMap().values().iterator();
        StringBuffer allString = new StringBuffer();
        FutureGet fg;
        while (iterator.hasNext()) {
          Data d = iterator.next();
          fg = peer.get(new Number160(((Integer) d.object()).intValue())).start();
          fg.awaitUninterruptibly();
          if (fg.data() != null) {
            allString.append(fg.data().object().toString()).append("\n");
          } else {
            System.err.println("Could not find key for val: " + d.object());
          }
        }
        System.out.println("got: " + allString.toString());
      } else {
        int r2 = new Random().nextInt();
        System.out.println("Storing DHT address (" + r2 + ") in DHT");
        peer.add(new Number160(keyStore)).data(new Data(r2)).start().awaitUninterruptibly();
        System.out.println("Adding (" + inLine + ") to DHT");
        peer.put(new Number160(r2)).data(new Data(inLine)).start().awaitUninterruptibly();
      }
    }
    System.out.println("Shutting down...");
    // peer.halt();
  }

  static String getLine() {
    System.out.print("Please enter a short line of text: ");
    InputStreamReader converter = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(converter);
    String inLine = "";
    try {
      inLine = in.readLine();
    } catch (Exception e) {
      System.err.println("Error reading input.");
      e.printStackTrace();
      System.exit(1);
    }
    return inLine;
  }
}
TOP

Related Classes of net.tomp2p.examples.ExampleNATChat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.