package bitNom; import java.io.BufferedReader; import java.io.Console; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; public class BitNom { public static Server server; public static DownloadManager downloadMgr; public static PeerLogger peerLgr; public static Searcher searcher; /** * @param args */ public static void main(String[] args) { if (args.length < 1) { CCNFileProxy.usage(); return; } Globals.ourHome = args[0]; if(args.length > 1) { Globals.ccnHome = args[1]; } peerLgr = new PeerLogger(); (new Thread (peerLgr)).start(); server = new Server(args, peerLgr); // directory on disk; ccn name (new Thread(server)).start(); downloadMgr = new DownloadManager(peerLgr); // peerlist; (new Thread (downloadMgr)).start(); // initDownload takes in dest name space, query, what you want to save it (relative to home path), chunks //searcher = new Searcher(); startBitNom(); // how do I make a call to download something? // } public static void test(){ try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } peerLgr.addPeertoList("/chris/", peerLgr.recentPeers); downloadMgr.initDownload("/chris/", "epic.jpg", "con.jpg", 1); } public static void startBitNom(){ //test(); Boolean quit = false; String input; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("BitNomen v0.0.1\n COMMANDS:\n\tDOWNLOAD <ccn filepath>\n\tSEARCH <query>\n\tSTATUS\n\tQUIT"); peerLgr.addPeertoList(Globals.ccnHome, peerLgr.recentPeers); while(!quit){ try { input = in.readLine(); } catch (IOException e) { // TODO Auto-generated catch block System.err.println("Error reading standard input."); input = ""; } if(input.matches("DOWNLOAD[\\s]+.*")) { System.out.println("Downloading " + input.replaceFirst("DOWNLOAD[\\s]+", "")); String chunks = "0"; try { chunks = in.readLine(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } int n = Integer.parseInt(chunks); String file = input.replaceFirst("DOWNLOAD[\\s]+", ""); String filename = file.replaceFirst("ccnx:/.+/", ""); String prefix = file.split(filename)[0]; downloadMgr.initDownload(prefix, filename, filename, n); } else if(input.matches("SEARCH[\\s]+.*")) { System.out.println("Searching for " + input.replaceFirst("SEARCH[\\s]+", "")); // Loop through our list of peers for(String peer : peerLgr.recentPeers) { System.out.println("Looking at peer: " + peer); String query = ".search-" + input.replaceFirst("SEARCH[\\s]+", ""); Console console = System.console(); Download q = downloadMgr.initDownload(peer, query, ".results", 1); q.waitForMe(); console.readLine("We get here."); try { FileInputStream fstream = new FileInputStream(Globals.ourHome + "/.results"); DataInputStream instream = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(instream)); String strLine; try { while((strLine = br.readLine()) != null) { System.out.println(strLine); System.out.println("To download, type 'y' and press enter. Otherwise, press enter to continue..."); String reply = console.readLine(); if(reply == "y") { Download d = downloadMgr.initDownload(peer, strLine, "download", 1); d.waitForMe(); break; // Exit search } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { instream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } else if(input.matches("STATUS")) { downloadMgr.printStatus(false); } else if(input.matches("QUIT")) { System.out.println("Goodbye!"); quit = true; System.exit(0); } else { System.out.println("Invalid input: " + input); input = ""; } } } }