Package net.tomp2p.examples

Source Code of net.tomp2p.examples.ExampleDirectData

package net.tomp2p.examples;

import java.io.IOException;
import java.util.Arrays;

import net.tomp2p.dht.FutureSend;
import net.tomp2p.dht.PeerDHT;
import net.tomp2p.dht.PeerBuilderDHT;
import net.tomp2p.futures.BaseFutureListener;
import net.tomp2p.p2p.PeerBuilder;
import net.tomp2p.p2p.RequestP2PConfiguration;
import net.tomp2p.p2p.builder.BootstrapBuilder;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;
import net.tomp2p.rpc.ObjectDataReply;

public class ExampleDirectData {
  static int p1Counter = 0;
  static int p2Counter = 0;

  public static void main(String[] args) throws IOException {
    final Number160 idP1 = Number160.createHash("p1");
    final Number160 idP2 = Number160.createHash("p2");
    PeerDHT p1 = new PeerBuilderDHT(new PeerBuilder(idP1).ports(1234).start()).start();
    PeerDHT p2 = new PeerBuilderDHT(new PeerBuilder(idP2).ports(1235).start()).start();
    BootstrapBuilder b = p2.peer().bootstrap();
    b.bootstrapTo(Arrays.asList(new PeerAddress(idP1, "localhost", 1234, 1234)));
    b.start().awaitUninterruptibly();

    p1.peer().objectDataReply(new ObjectDataReply() {
      @Override
      public Object reply(PeerAddress sender, Object request) throws Exception {
        if (sender.peerId().equals(idP2)) {
          int val = (Integer) request;
          System.err.println(String.format("P1 received: %d", val));
          if (val != p1Counter) {
            System.err.println("something went wrong");
            throw new Exception("");
          }

          p1Counter++;

          return p1Counter - 1;
        }

        return null;
      }
    });

    p2.peer().objectDataReply(new ObjectDataReply() {
      @Override
      public Object reply(PeerAddress sender, Object request) throws Exception {
        if (sender.peerId().equals(idP1)) {
          int val = (Integer) request;
          System.err.println(String.format("P2 received: %d", val));
          if (val != p2Counter) {
            System.err.println("something went wrong");
            throw new Exception("");
          }

          p2Counter++;

          return p2Counter - 1;
        }

        return null;
      }
    });

    // p2 -> p1 -- Works
    p2SendNext(p2, idP1);

    // Uncomment for opposite direction p1 -> p2 -- WILL NOT WORK
    // p1SendNext(p1, idP2);

  }

  static void p1SendNext(final PeerDHT p, final Number160 idP2) {
    p1Counter++;
    p.send(idP2).object(p1Counter - 1).requestP2PConfiguration(new RequestP2PConfiguration(1, 5, 0)).start()
            .addListener(new BaseFutureListener<FutureSend>() {

              @Override
              public void operationComplete(FutureSend future) throws Exception {

                Object[] values = future.rawDirectData2().values().toArray();
                if (values.length != 1) {
                  throw new Exception(String.format("Invalid length %d", values.length));
                }

                if (!((Integer) values[0] == p1Counter - 1)) {
                  throw new Exception("Invalid value");
                }

                System.err.println(String.format("P1 Received: %d", values[0]));
                p1SendNext(p, idP2);
              }

              @Override
              public void exceptionCaught(Throwable t) throws Exception {
                System.err.println(t.toString());

              }
            });

  }

  static void p2SendNext(final PeerDHT p, final Number160 idP1) {
    p2Counter++;
    p.send(idP1).object(p2Counter - 1).requestP2PConfiguration(new RequestP2PConfiguration(1, 5, 0)).start()
            .addListener(new BaseFutureListener<FutureSend>() {

              @Override
              public void operationComplete(FutureSend future) throws Exception {

                Object[] values = future.rawDirectData2().values().toArray();
                if (values.length == 1)
                  System.err.println(String.format("P2 received: %d", values[0]));
                else if (values.length != 1) {
                  throw new Exception("Invalid length");
                }

                if (!((Integer) values[0] == p2Counter - 1)) {
                  throw new Exception("Invalid value");
                }

                // System.err.println(String.format("P2 Received: %d",
            // values[0]));
                p2SendNext(p, idP1);
              }

              @Override
              public void exceptionCaught(Throwable t) throws Exception {
                System.err.println(t.toString());

              }
            });

  }
}
TOP

Related Classes of net.tomp2p.examples.ExampleDirectData

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.