package com.peerwasp.node;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import net.tomp2p.p2p.Peer;
import org.hive2hive.core.api.H2HNode;
import org.hive2hive.core.api.configs.FileConfiguration;
import org.hive2hive.core.api.configs.NetworkConfiguration;
import org.hive2hive.core.api.interfaces.IFileConfiguration;
import org.hive2hive.core.api.interfaces.IH2HNode;
import org.hive2hive.core.api.interfaces.INetworkConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Creates a network of multiple nodes. First, an initial peer is created.
* Second, all other peers connect to the (local) initial peer.
*
* @author albrecht
*
*/
public class ManyNodesStarter {
private static final Logger logger = LoggerFactory.getLogger(ManyNodesStarter.class);
private static int NUM_NODES = 5;
private static List<IH2HNode> nodes;
private static IH2HNode initialNode;
public static void main(String[] args) {
try {
// get number of nodes from commandline argument
if (args.length == 1) {
NUM_NODES = Integer.valueOf(args[0]);
}
logger.info("Starting {} nodes.", NUM_NODES);
// create all nodes
nodes = new ArrayList<>();
for (int i = 0; i < NUM_NODES; ++i) {
try {
INetworkConfiguration netConfig = null;
if (i == 0) {
// first peer (initial)
logger.info("Create initial peer");
netConfig = NetworkConfiguration.createInitial();
} else {
logger.info("Create peer {} and connect to initial peer", i + 1);
String nodeId = UUID.randomUUID().toString();
Peer initialPeer = initialNode.getPeer().peer();
netConfig = NetworkConfiguration.createLocalPeer(nodeId, initialPeer);
}
IFileConfiguration fileConfig = FileConfiguration.createDefault();
IH2HNode peerNode = H2HNode.createNode(fileConfig);
boolean success = peerNode.connect(netConfig);
if (success) {
nodes.add(peerNode);
logger.info("Node {}/{} up and running.", i + 1, NUM_NODES);
if (i == 0) {
initialNode = peerNode;
}
} else {
logger.error("Could not connect node {} to initial peer", i + 1);
}
} catch (Exception e) {
logger.warn("Exception: {}", e.getMessage(), e);
}
}
// do not exit
logger.info("Finished creating {} nodes.", NUM_NODES);
Thread.currentThread().join();
} catch (Exception e) {
logger.warn("Exception: {}", e.getMessage(), e);
}
}
}