package org.peerbox.client;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Path;
import java.nio.file.Paths;
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.IH2HNode;
import org.hive2hive.core.api.interfaces.INetworkConfiguration;
import org.hive2hive.core.security.H2HDummyEncryption;
import org.hive2hive.core.security.UserCredentials;
import org.hive2hive.core.serializer.FSTSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ClientStarter extends AbstractStarter {
private static final Logger logger = LoggerFactory.getLogger(ClientStarter.class);
private static boolean IS_INITIAL_NODE;
private static String BOOTSTRAP_HOST_NAME;
private static final String USER = "h2huser";
private static final String PASSWORD = "SecretPassword";
private static final String PIN = "AZBY";
private static String NODE_NAME;
private ClientNode client;
public static void main(String[] args) {
parseArguments(args);
try {
new ClientStarter().run();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void parseArguments(String[] args) {
if(args.length != 3) {
quit(args);
}
for(int i = 0; i < args.length; ++i) {
String a = args[i];
String[] elements = a.split("=");
if(elements.length != 2) {
quit(args);
}
switch(elements[0]) {
case "initial":
if(elements[1].equalsIgnoreCase("1")) {
IS_INITIAL_NODE = true;
}
logger.info("IS_INITIAL_NODE={}", IS_INITIAL_NODE);
break;
case "bootstrap":
BOOTSTRAP_HOST_NAME = elements[1];
logger.info("BOOTSTRAP_HOST_NAME={}", BOOTSTRAP_HOST_NAME);
break;
case "node":
NODE_NAME = elements[1];
logger.info("NODE_NAME={}", NODE_NAME);
break;
default:
logger.error("Unknown parameter provided.");
quit(args);
break;
}
}
}
private static void quit(String[] args) {
logger.error("Wrong arguments provided. Exiting...");
logger.error("Arguments:");
for(String a : args) {
logger.error("\t{}", a);
}
logger.error("Usage: initial=[0 or 1] bootstrap=[address to use] node=[node id]");
System.exit(-1);
}
public ClientStarter() throws IOException {
super();
}
private void run() {
try {
setup();
// teardown();
} catch (Exception e) {
e.printStackTrace();
}
}
private void setup() throws Exception {
IH2HNode node = createNode();
credentials = new UserCredentials(USER, PASSWORD, PIN);
Path rootPath = Paths.get(BASE_PATH.toString(), NODE_NAME);
if(IS_INITIAL_NODE) {
registerUser(node, credentials);
}
client = new ClientNode(node, credentials, rootPath);
}
private IH2HNode createNode() throws UnknownHostException {
InetAddress bootstrapAddress = InetAddress.getByName(BOOTSTRAP_HOST_NAME); // InetAddress.getLocalHost();
INetworkConfiguration networkConf = null;
if (IS_INITIAL_NODE) {
networkConf = NetworkConfiguration.createInitial("node-"
+ BOOTSTRAP_HOST_NAME + "-" + NODE_NAME);
} else {
networkConf = NetworkConfiguration.create("node-"
+ BOOTSTRAP_HOST_NAME + "-" + NODE_NAME,
bootstrapAddress);
}
FSTSerializer serializer = new FSTSerializer();
IH2HNode node = H2HNode.createNode(FileConfiguration.createDefault(), new H2HDummyEncryption(), serializer);
node.connect(networkConf);
return node;
}
}