Package net.tomp2p.p2p

Source Code of net.tomp2p.p2p.TestRelay$MyDirectDataRPC

package net.tomp2p.p2p;

import java.util.Random;

import net.tomp2p.Utils2;
import net.tomp2p.connection.ConnectionBean;
import net.tomp2p.connection.PeerBean;
import net.tomp2p.connection.PeerConnection;
import net.tomp2p.connection.Responder;
import net.tomp2p.futures.FutureDirect;
import net.tomp2p.futures.FuturePeerConnection;
import net.tomp2p.message.Message;
import net.tomp2p.peers.PeerAddress;
import net.tomp2p.rpc.DirectDataRPC;
import net.tomp2p.rpc.ObjectDataReply;

import org.junit.Assert;
import org.junit.Test;

public class TestRelay {
    private final static Random rnd = new Random(42L);

    @Test
    public void testPeerConnection() throws Exception {
        Peer master = null;
        Peer slave = null;
        try {
        master = Utils2.createNodes(1, rnd, 4001, null, false)[0];
        slave = Utils2.createNodes(1, rnd, 4002, null, false)[0];
        System.err.println("master is " + master.peerAddress());
        System.err.println("slave is " + slave.peerAddress());
       
        FuturePeerConnection pcMaster = master.createPeerConnection(slave.peerAddress());
        MyDirectDataRPC myDirectDataRPC = new MyDirectDataRPC(slave.peerBean(), slave.connectionBean());
        slave.directDataRPC(myDirectDataRPC);
       
        slave.objectDataReply(new ObjectDataReply() {
            @Override
            public Object reply(PeerAddress sender, Object request) throws Exception {
                return "yoo!";
            }
        });
       
        master.objectDataReply(new ObjectDataReply() {
            @Override
            public Object reply(PeerAddress sender, Object request) throws Exception {
                return "world!";
            }
        });
       
        FutureDirect futureResponse = master.sendDirect(pcMaster).object("test").start().awaitUninterruptibly();
        Assert.assertEquals("yoo!", futureResponse.object());
       
        FuturePeerConnection pcSlave = myDirectDataRPC.peerConnection();
       
        futureResponse = slave.sendDirect(pcSlave).object("hello").start().awaitUninterruptibly();
        System.err.println(futureResponse.failedReason());
        Assert.assertEquals("world!", futureResponse.object());
       
        Thread.sleep(1000);
        pcSlave.close();
        pcMaster.close();
        System.err.println("done");
       
        } finally {
            if (master != null) {
                master.shutdown().await();
            }
            if (slave != null) {
                slave.shutdown().await();
            }
        }

    }
   
    private static class MyDirectDataRPC extends DirectDataRPC {
       
        private FuturePeerConnection futurePeerConnection;

        MyDirectDataRPC(PeerBean peerBean, ConnectionBean connectionBean) {
            super(peerBean, connectionBean);
        }
        @Override
        public void handleResponse(Message message, PeerConnection peerConnection, boolean sign, Responder responder)
                throws Exception {
            futurePeerConnection = new FuturePeerConnection(message.sender());
            futurePeerConnection.done(peerConnection);
            super.handleResponse(message, peerConnection, sign, responder);
        }
       
        public FuturePeerConnection peerConnection() {
            return futurePeerConnection;
        }
    }
}
TOP

Related Classes of net.tomp2p.p2p.TestRelay$MyDirectDataRPC

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.