/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.jxta.socket.examples;
import java.io.File;
import java.io.ObjectInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.SecureRandom;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.jxta.platform.NetworkConfigurator;
import net.jxta.platform.NetworkManager;
import net.jxta.platform.NetworkManager.ConfigMode;
import net.jxta.socket.JxtaServerSocket;
import net.jxta.socket.JxtaSocket;
/**
*
* @author nick
*/
public class SocketTestUnReliable {
private static File tempStorage;
protected NetworkManager rdvManager;
protected NetworkManager aliceManager;
protected NetworkManager bobManager;
private String referenceDataFileName = "referenceDataFileName";
private String streamedDataFileName = "streamedDataFileName";
public static void main(String[] args) {
try {
SocketTestUnReliable t = new SocketTestUnReliable();
t.init();
t.run();
t.end();
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void init() {
System.setProperty("net.jxta.logging.Logging", "OFF");
System.setProperty("net.jxta.level", "OFF");
try {
rmdir(tempStorage);
tempStorage = new File("tempStorage");
tempStorage.mkdir();
initPeers();
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void end() {
try {
killPeers();
SystemTestUtils.rmdir(tempStorage);
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void run() {
try {
JxtaServerSocketRunnable serverSocketRunnable = new JxtaServerSocketRunnable(true);
Thread thread = new Thread(serverSocketRunnable);
thread.start();
//JxtaSocket clientSocket = new JxtaSocket(PeerGroup group, PeerID peerid, PipeAdvertisement pipeAdv, int timeout, boolean reliable);
JxtaSocket clientSocket=null;
try {
clientSocket = new JxtaSocket(bobManager.getNetPeerGroup(), aliceManager.getPeerID(), serverSocketRunnable.getJxtaServerSocket().getPipeAdv(), 5000, false);
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("got first client socket at : " + new Date() + ", clientSocket = " + clientSocket);
OutputStream os = clientSocket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
for (int i=0;i<1000;i++) {
oos.writeUTF(dataString+i);
oos.flush();
}
oos.close();
clientSocket.close();
System.out.println("client socket finished sending file at : " + new Date());
//buf
} catch (Exception ex) {
ex.printStackTrace();
}
}
String dataString = "mary had a little lamb";
class JxtaServerSocketRunnable implements Runnable {
private boolean encrypt;
private JxtaServerSocket serverSocket;
JxtaServerSocketRunnable(boolean encrypt) throws IOException {
this.encrypt = encrypt;
serverSocket = SystemTestUtils.createServerSocket(aliceManager, encrypt);
}
public void run() {
while(!serverSocket.isClosed()) {
try {
JxtaSocket jxtaSocket = (JxtaSocket) serverSocket.accept();
processSocket(jxtaSocket);
} catch (IOException ex) {
Logger.getLogger(SocketTestUnReliable.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
JxtaServerSocket getJxtaServerSocket() {
return serverSocket;
}
void close() throws IOException {
serverSocket.close();
}
private void processSocket(JxtaSocket jxtaSocket) throws IOException {
System.out.println("got server socket at : " + new Date());
InputStream is = jxtaSocket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
while(ois.available()>=0) {
String streamedData = ois.readUTF();
System.out.println("streamedData : " + streamedData);
}
ois.close();
// jxtaSocket.close();
System.out.println("server socket fisished reading data at : " + new Date());
boolean dataCorrect = true;
System.err.println("server socket fisished comparing data at : " + new Date() + ", dataCorrect = " + dataCorrect);
}
}
public static void rmdir(File dir) throws IOException {
if (null == dir)
return;
if (!dir.exists())
return;
File[] children = dir.listFiles();
if (children!=null)
for (int i=0; i<children.length; i++) {
if(children[i].isFile())
children[i].delete();
else if (children[i].isDirectory())
rmdir(children[i]);
}
dir.delete();
}
public void initPeers() throws Exception {
rdvManager = new NetworkManager(ConfigMode.RENDEZVOUS, "rdv", (new File(tempStorage, "rdv")).toURI());
configureForTcp(rdvManager, 57080, true);
aliceManager = new NetworkManager(ConfigMode.ADHOC, "alice", (new File(tempStorage, "alice")).toURI());
configureForTcp(aliceManager, 59080, false);
bobManager = new NetworkManager(ConfigMode.ADHOC, "bob", (new File(tempStorage, "bob")).toURI());
configureForTcp(bobManager, 58081, false);
Object object = new Object();
synchronized(object) {
rdvManager.startNetwork();
object.wait(2000);
aliceManager.startNetwork();
object.wait(2000);
bobManager.startNetwork();
object.wait(2000);
}
System.out.println("peerid rdvManager " + rdvManager.getNetPeerGroup().getPeerID());
System.out.println("peerid aliceManager " + aliceManager.getNetPeerGroup().getPeerID());
System.out.println("peerid bobManager " + bobManager.getNetPeerGroup().getPeerID());
System.out.println("rdv is reachable from alice " + ((net.jxta.impl.endpoint.EndpointServiceImpl)aliceManager.getNetPeerGroup().getEndpointService()).isReachable(rdvManager.getPeerID(), true));
System.out.println("rdv is reachable from bob " + ((net.jxta.impl.endpoint.EndpointServiceImpl)bobManager.getNetPeerGroup().getEndpointService()).isReachable(rdvManager.getPeerID(), true));
System.out.println("bob is reachable from alice " + ((net.jxta.impl.endpoint.EndpointServiceImpl)aliceManager.getNetPeerGroup().getEndpointService()).isReachable(bobManager.getPeerID(), true));
System.out.println("alice is reachable from bob " + ((net.jxta.impl.endpoint.EndpointServiceImpl)bobManager.getNetPeerGroup().getEndpointService()).isReachable(aliceManager.getPeerID(), true));
}
private void configureForTcp(NetworkManager manager, int port, boolean isRdv) throws IOException {
NetworkConfigurator configurator = manager.getConfigurator();
configurator.setTcpEnabled(true);
configurator.setHttpEnabled(false);
configurator.setHttp2Enabled(false);
configurator.setTcpIncoming(true);
configurator.setTcpOutgoing(true);
configurator.setTcpPort(port);
configurator.setTcpStartPort(port);
configurator.setTcpEndPort(port+100);
configurator.setUseMulticast(true);
if (!isRdv) {
java.util.HashSet rendezvoussHashSet = new java.util.HashSet();
String rendezvous = "tcp://10.0.0.12:"+57080;
rendezvoussHashSet.add(rendezvous);
configurator.setRendezvousSeeds(rendezvoussHashSet);
}
}
public void killPeers() throws Exception {
aliceManager.stopNetwork();
bobManager.stopNetwork();
}
}