diff --git a/psyncPC.iml b/psyncPC.iml index e9ee694..0080e24 100644 --- a/psyncPC.iml +++ b/psyncPC.iml @@ -1,13 +1,16 @@ - - - + + + + + + - + \ No newline at end of file diff --git a/src/main/java/bishakh/psync/Discoverer.java b/src/main/java/bishakh/psync/Discoverer.java index 15ba2fa..03128cb 100644 --- a/src/main/java/bishakh/psync/Discoverer.java +++ b/src/main/java/bishakh/psync/Discoverer.java @@ -9,6 +9,10 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; +import java.io.*; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; /** @@ -16,10 +20,17 @@ */ public class Discoverer { + HashMapcontactMap = new HashMap<>(); /* Store contact information */ + String BROADCAST_IP; + final String DATABASE_NAME; + final String DATABASE_PATH; + + int PORT; String PEER_ID; Logger logger; + File file; /* File attribute added */ final Thread[] thread = new Thread[3]; final BroadcastThread broadcastThread; final ListenThread listenThread; @@ -31,11 +42,20 @@ public class Discoverer { public volatile ConcurrentHashMap> priorityPeerList; public volatile ConcurrentHashMap> originalPeerList; - public Discoverer(String BROADCAST_IP, String PEER_ID, int PORT, Logger LoggerObj) { + public Discoverer(String BROADCAST_IP, String PEER_ID, int PORT, Logger LoggerObj,String fileName,String databaseDirectory ) throws IOException { this.BROADCAST_IP = BROADCAST_IP; this.PORT = PORT; this.PEER_ID = PEER_ID; this.logger = LoggerObj; + this.DATABASE_NAME = fileName; + this.DATABASE_PATH = databaseDirectory+DATABASE_NAME; + this.file = new File(DATABASE_PATH); + + if(!file.exists()) + { + file.createNewFile(); + } + // Initialize priorities (lower int = higher priority) // The peers whose ID starts with these keywords will have the priority @@ -58,6 +78,7 @@ public Discoverer(String BROADCAST_IP, String PEER_ID, int PORT, Logger LoggerOb thread[0] = new Thread(broadcastThread); thread[1] = new Thread(listenThread); thread[2] = new Thread(peerExpiryThread); + } public void startBroadcast(){ @@ -113,7 +134,24 @@ public void stopPeerExpiry() { } } - public void startDiscoverer(){ + public void startDiscoverer() throws FileNotFoundException { + /*when discoverer starts, previous information in contactHistory.txt gets stored in HashMap "contactMap" */ + FileReader fileReader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(fileReader); + try { + String line =bufferedReader.readLine(); + while(line!=null) + { + String[] one=line.split(" ",100); /// here length of PEER_ID is restricted + contactMap.put(one[0],one[1]); + line=bufferedReader.readLine(); + } + } catch (IOException e) { + e.printStackTrace(); + } + PrintWriter writer = new PrintWriter(file); + writer.print(""); + writer.close(); startBroadcast(); startListener(); startPeerExpiry(); @@ -287,6 +325,25 @@ public void run() { if(willUpdatePeer) { String peerID = new String(datagramPacket.getData(), 0, datagramPacket.getLength()); updatePeers(datagramPacket.getAddress().getHostAddress(), peerID); + + /* While listening to a device, everytime contactHistory.txt file is updated*/ + + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss"); + Calendar cal = Calendar.getInstance(); + String timeStamp = dateFormat.format(cal.getTime()); + contactMap.put(peerID, timeStamp); + FileWriter fileWriter = new FileWriter(file.getAbsoluteFile(), true); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + PrintWriter printWriter = new PrintWriter(bufferedWriter); + PrintWriter writer = new PrintWriter(file); + writer.print(""); + writer.close(); + for(Map.Entry m:contactMap.entrySet()) + { + printWriter.println(m.getKey()+" "+m.getValue()); + } + printWriter.close(); + } } // end of while }catch (UnknownHostException e){ @@ -382,4 +439,5 @@ public void stop() { } -} \ No newline at end of file + +} diff --git a/src/main/java/bishakh/psync/SyncService.java b/src/main/java/bishakh/psync/SyncService.java index 9920fb5..36413bc 100644 --- a/src/main/java/bishakh/psync/SyncService.java +++ b/src/main/java/bishakh/psync/SyncService.java @@ -5,6 +5,7 @@ import java.text.SimpleDateFormat; import java.util.Calendar; + public class SyncService { private static final String BROADCAST_IP = "172.16.5.255"; @@ -17,6 +18,8 @@ public class SyncService { private static String mapFileServerDirectory = "/home/alarm/DMS/"; private static String databaseAndLogDirectory = "/home/alarm/DMS/"; private static String databaseName = "fileDB.txt"; + private static String contactName ="contactHistoryFile.txt"; + public Logger logger; public WebServer webServer; @@ -24,62 +27,73 @@ public class SyncService { public FileManager fileManager; public FileTransporter fileTransporter; public Controller controller; + + + public SyncService() throws IOException { + - public SyncService() { logger = new Logger(databaseAndLogDirectory, PEER_ID); - discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger); + discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger,contactName,databaseAndLogDirectory); fileManager = new FileManager(PEER_ID, databaseName, databaseAndLogDirectory, syncDirectory, mapFileServerDirectory, logger); fileTransporter = new FileTransporter(syncDirectory, logger); controller = new Controller(discoverer, fileManager, fileTransporter, syncInterval, maxRunningDownloads, logger, 2, true); webServer = new WebServer(8080, controller, logger); + } - public SyncService(String inputPeerId, String baseDirectory) { - syncDirectory = baseDirectory + File.separator + "sync" + File.separator; + public SyncService(String inputPeerId, String baseDirectory) throws IOException { + syncDirectory = baseDirectory + "sync" + File.separator; mapFileServerDirectory = baseDirectory; databaseAndLogDirectory = baseDirectory; PEER_ID = inputPeerId; + logger = new Logger(databaseAndLogDirectory, PEER_ID); - discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger); + discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger,contactName,databaseAndLogDirectory); fileManager = new FileManager(PEER_ID, databaseName, databaseAndLogDirectory, syncDirectory, mapFileServerDirectory, logger); fileTransporter = new FileTransporter(syncDirectory, logger); controller = new Controller(discoverer, fileManager, fileTransporter, syncInterval, maxRunningDownloads, logger, 2, true); webServer = new WebServer(8080, controller, logger); } - public SyncService(String inputPeerId, String baseDirectory, int priorityMethod) { - syncDirectory = baseDirectory + File.separator + "sync" + File.separator; + public SyncService(String inputPeerId, String baseDirectory, int priorityMethod) throws IOException { + syncDirectory = baseDirectory +"sync" + File.separator; mapFileServerDirectory = baseDirectory; databaseAndLogDirectory = baseDirectory; PEER_ID = inputPeerId; + logger = new Logger(databaseAndLogDirectory, PEER_ID); - discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger); + discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger,contactName,databaseAndLogDirectory); fileManager = new FileManager(PEER_ID, databaseName, databaseAndLogDirectory, syncDirectory, mapFileServerDirectory, logger); fileTransporter = new FileTransporter(syncDirectory, logger); controller = new Controller(discoverer, fileManager, fileTransporter, syncInterval, maxRunningDownloads, logger, priorityMethod, true); webServer = new WebServer(8080, controller, logger); } - public SyncService(String inputPeerId, String baseDirectory, int priorityMethod, boolean restrictedEpidemicFlag) { - syncDirectory = baseDirectory + File.separator + "sync" + File.separator; + public SyncService(String inputPeerId, String baseDirectory, int priorityMethod, boolean restrictedEpidemicFlag) throws IOException { + + + syncDirectory = baseDirectory + "sync" + File.separator; mapFileServerDirectory = baseDirectory; databaseAndLogDirectory = baseDirectory; PEER_ID = inputPeerId; - logger = new Logger(databaseAndLogDirectory, PEER_ID); - discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger); + discoverer = new Discoverer(BROADCAST_IP, PEER_ID, PORT, logger,contactName,databaseAndLogDirectory); fileManager = new FileManager(PEER_ID, databaseName, databaseAndLogDirectory, syncDirectory, mapFileServerDirectory, logger); fileTransporter = new FileTransporter(syncDirectory, logger); controller = new Controller(discoverer, fileManager, fileTransporter, syncInterval, maxRunningDownloads, logger, priorityMethod, restrictedEpidemicFlag); webServer = new WebServer(8080, controller, logger); + } - public void start(){ + public void start() throws FileNotFoundException { + + + discoverer.startDiscoverer(); fileManager.startFileManager(); controller.startController(); @@ -97,7 +111,7 @@ public void stop() { webServer.stop(); } - public static void main(final String[] args) { + public static void main(final String[] args) throws IOException { System.out.println(args.length); if(args.length < 2){ SyncService s = new SyncService(); @@ -147,6 +161,8 @@ public void uncaughtException(Thread t, Throwable e) { } } }); + + } }