From 5fff86bb5850ac100c54e78f9c6f5fade03f2db3 Mon Sep 17 00:00:00 2001 From: Wang Yuyang Date: Fri, 19 Nov 2021 19:54:02 +0800 Subject: [PATCH] update --- ...M_09db3416-0971-4439-8bf3-25e58e212b0c_1.a | 5 - ...182e82c-a54c-4b2d-8e33-021806c33dea_123.db | Bin 53248 -> 0 bytes ...f60e4d3-0010-499f-9d3c-e914ba7db0ec_123.db | Bin 53248 -> 0 bytes .../echo/p2p_project/client/ClientMain.java | 212 ++++++------------ .../client/gui/ClientIndexController.java | 8 +- .../client/interfaces/P2P_FileRegistry.java | 2 +- .../p2p_project/client/model/P2PFileImpl.java | 2 +- .../echo/p2p_project/server/ServerMain.java | 11 +- .../server/gui/ServerIndexController.java | 47 +++- ...gRegistry.java => FileLookupRegistry.java} | 6 +- .../server/model/ConstructImpl.java | 40 +++- .../server/model/FileLookupImpl.java | 126 +++++++++++ .../p2p_project/server/model/SyncingImpl.java | 53 ----- .../p2p_project/server/model/WatchDog.java | 12 +- .../com/echo/p2p_project/u_model/Peer.java | 6 +- .../echo/p2p_project/u_model/Resource.java | 10 +- src/main/resources/gui/server_index.fxml | 2 +- target/classes/gui/server_index.fxml | 2 +- 18 files changed, 303 insertions(+), 241 deletions(-) delete mode 100644 download/2247def3-5895-418b-8573-c549008fe2e1_FROM_09db3416-0971-4439-8bf3-25e58e212b0c_1.a delete mode 100644 download/5c068312-74fb-48e9-a88e-e15646070176_FROM_2182e82c-a54c-4b2d-8e33-021806c33dea_123.db delete mode 100644 download/bbf7e47e-0c7e-4627-ab31-3b3da6fbc9d6_FROM_3f60e4d3-0010-499f-9d3c-e914ba7db0ec_123.db rename src/main/java/com/echo/p2p_project/server/interfaces/{SyncingRegistry.java => FileLookupRegistry.java} (63%) create mode 100644 src/main/java/com/echo/p2p_project/server/model/FileLookupImpl.java delete mode 100644 src/main/java/com/echo/p2p_project/server/model/SyncingImpl.java diff --git a/download/2247def3-5895-418b-8573-c549008fe2e1_FROM_09db3416-0971-4439-8bf3-25e58e212b0c_1.a b/download/2247def3-5895-418b-8573-c549008fe2e1_FROM_09db3416-0971-4439-8bf3-25e58e212b0c_1.a deleted file mode 100644 index c89a354..0000000 --- a/download/2247def3-5895-418b-8573-c549008fe2e1_FROM_09db3416-0971-4439-8bf3-25e58e212b0c_1.a +++ /dev/null @@ -1,5 +0,0 @@ -hahaha -================ -This File is 1.a -================ - diff --git a/download/5c068312-74fb-48e9-a88e-e15646070176_FROM_2182e82c-a54c-4b2d-8e33-021806c33dea_123.db b/download/5c068312-74fb-48e9-a88e-e15646070176_FROM_2182e82c-a54c-4b2d-8e33-021806c33dea_123.db deleted file mode 100644 index 1ade6625a3b54512566d66425a6a818cb76538d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 diff --git a/download/bbf7e47e-0c7e-4627-ab31-3b3da6fbc9d6_FROM_3f60e4d3-0010-499f-9d3c-e914ba7db0ec_123.db b/download/bbf7e47e-0c7e-4627-ab31-3b3da6fbc9d6_FROM_3f60e4d3-0010-499f-9d3c-e914ba7db0ec_123.db deleted file mode 100644 index 1ade6625a3b54512566d66425a6a818cb76538d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 diff --git a/src/main/java/com/echo/p2p_project/client/ClientMain.java b/src/main/java/com/echo/p2p_project/client/ClientMain.java index 37e5c29..49b3d79 100644 --- a/src/main/java/com/echo/p2p_project/client/ClientMain.java +++ b/src/main/java/com/echo/p2p_project/client/ClientMain.java @@ -8,9 +8,9 @@ import com.echo.p2p_project.client.interfaces.P2P_FileRegistry; import com.echo.p2p_project.client.model.CHeartBeat; import com.echo.p2p_project.client.model.P2PFileImpl; import com.echo.p2p_project.server.interfaces.ConstructRegistry; +import com.echo.p2p_project.server.interfaces.FileLookupRegistry; import com.echo.p2p_project.server.interfaces.HeartBeatRegistry; import com.echo.p2p_project.server.interfaces.HelloRegistryFacade; -import com.echo.p2p_project.server.interfaces.SyncingRegistry; import com.echo.p2p_project.u_model.Peer; import com.echo.p2p_project.u_model.Resource; import com.sun.javafx.collections.ObservableMapWrapper; @@ -34,7 +34,7 @@ public class ClientMain { public static String MainServerIP = "127.0.0.1"; public static int RMI_PORT = 1099; public static Peer peer; - public static ObservableMapWrapper DHRT = new ObservableMapWrapper<>(new LinkedHashMap<>()); + public static ObservableMapWrapper DHRT = new ObservableMapWrapper<>(new LinkedHashMap<>()); public static Integer retry_times = 0; private static String name = "Peer"; private static String IP = Util.getIP(); @@ -44,7 +44,7 @@ public class ClientMain { private static Registry file_service; private static ConstructRegistry constructRegistry; private static HeartBeatRegistry heartBeatRegistry; - private static SyncingRegistry syncingRegistry; + private static FileLookupRegistry fileLookupRegistry; private static Boolean hasStarted = false; private static Scanner sc; private static Thread service; @@ -86,13 +86,14 @@ public class ClientMain { reg_file(res_name); break; case "l": - System.out.print("Look up Filename: "); - String file_name = sc.nextLine(); - HashMap res = look_up_file(file_name); - System.out.println(res); + System.out.print("Look up File HASH: "); + String hash = sc.nextLine(); + Resource res = look_up_file(hash); + if (res != null) + System.out.println(res); break; case "d": - System.out.print("Download Filename: "); + System.out.print("Download File HASH: "); String file_name_to_download = sc.nextLine(); download(file_name_to_download); @@ -102,17 +103,20 @@ public class ClientMain { } } - public static void download(String file_name_to_download) { - HashMap resources = look_up_file(file_name_to_download); - download(resources); + public static void download(String hash) { + Resource resources = look_up_file(hash); + if (resources != null) { + System.out.println("Download: " + resources.getGUID()); + download(resources); + } download_retry_count = 0; } - private static void download(String file_name_to_download, Integer retry_count) { + private static void download(String hash, Integer retry_count) { if (download_retry_count <= 5) { download_retry_count += 1; System.out.println("Retrying " + download_retry_count); - HashMap resources = look_up_file(file_name_to_download); + Resource resources = look_up_file(hash); try { Thread.sleep(1000); } catch (InterruptedException e) { @@ -196,7 +200,7 @@ public class ClientMain { } constructRegistry = (ConstructRegistry) registry.lookup("constructRegistry"); heartBeatRegistry = (HeartBeatRegistry) registry.lookup("heatBeatRegistry"); - syncingRegistry = (SyncingRegistry) registry.lookup("syncingRegistry"); + fileLookupRegistry = (FileLookupRegistry) registry.lookup("syncingRegistry"); return true; } catch (NotBoundException | RemoteException e) { @@ -236,7 +240,7 @@ public class ClientMain { private static void sync_peer() { try { - peer = syncingRegistry.syncPeer(peer.getGUID()); + peer = fileLookupRegistry.syncPeer(peer.getGUID()); } catch (RemoteException e) { e.printStackTrace(); System.out.println("Peer Sync Failed !"); @@ -244,139 +248,50 @@ public class ClientMain { System.out.println("Peer Sync Finished !"); } - public static HashMap look_up_file(String file_name) { - HashMap result = new LinkedHashMap<>(); - System.out.println("Looking for: " + file_name); - for (Resource r : DHRT.values()) { - if (r.getName().equals(file_name)) { - System.out.println("FOUND in local DHRT."); - result.put(r.getGUID(), r); - new Thread(new Runnable() { - @Override - public void run() { - try { - HashMap hashMap = syncingRegistry.syncUHRT(); - DHRT.putAll(hashMap); - System.out.println(Thread.currentThread() + "sync UHRT Finished."); - } catch (RemoteException e) { - e.printStackTrace(); - } - } - }).start(); + public static Resource look_up_file(String hash) { + System.out.println("Looking HASH for: " + hash); + Resource res = ClientMain.DHRT.get(hash); + if (res == null) { + System.out.println("Not found in local DHRT"); + System.out.println("Lookup in UHRT..."); + try { + res = fileLookupRegistry.lookupInUHRT(hash); + } catch (RemoteException e) { + e.printStackTrace(); } - } - if (result.size() == 0) - System.out.println("Not found in local DHRT."); - else - return result; - try { - HashMap hashMap = syncingRegistry.syncUHRT(); - DHRT.putAll(hashMap); - System.out.println("DHRT Sync Finished !"); - } catch (RemoteException e) { - e.printStackTrace(); - System.out.println("DHRT Sync Failed !"); - } - for (Resource r : DHRT.values()) { - if (r.getName().equals(file_name)) { - System.out.println("FOUNT Resource in DHRT (After SYNC REMOTE UHRT)"); - result.put(r.getGUID(), r); + if (res == null) { + System.out.println("Not found in UHRT"); + System.out.println("Abort"); + return null; } + System.out.println("Found in UHRT: " + res.getGUID()); + System.out.println("Update DHRT"); + ClientMain.DHRT.put(res.getGUID(), res); + } + else{ + System.out.println("Found in DHRT."); } - if (result.size() == 0) - System.out.println("Requested Resource NOT FOUND !"); - return result; + return res; } - public static void download(HashMap resources) { - if (resources.size() <= 0) { + public static void download(Resource resources) { + if (resources == null || resources.possessedBy.size() == 0) { System.out.println("Resource can not be download !"); return; } - if (resources.size() > 1) { - System.out.println("There are more than 1 resource with identical name:"); - System.out.println("File List: "); - for (Resource r : resources.values()) { - System.out.println(r); - } - System.out.println("Checking file hashing..."); - Boolean hash_all_same = true; - String file_hash = ((Resource) resources.values().toArray()[0]).getHash(); - for (Resource r : resources.values()) { - if (!r.getHash().equals(file_hash)) { - hash_all_same = false; - break; - } - } - UUID GUID = null; - if (hash_all_same) { - System.out.println("Hash is the same, looking for best node..."); - ArrayList processed_peers = new ArrayList<>(); - for (Resource r : resources.values()) { - for (Peer p : r.possessedBy.values()) { - processed_peers.add(p); - } - } - processed_peers.sort(new Comparator() { - @Override - public int compare(Peer o1, Peer o2) { - return o1.getRoutingMetric() - o2.getRoutingMetric(); - } - }); - for (Peer p : processed_peers) { - System.out.println(p.getGUID().toString() + " <> " + p.getRoutingMetric()); - } - - for (Resource r : processed_peers.get(0).possessing.values()) { - System.out.println("File hash: " + file_hash); - System.out.println("Res hash : " + r.getHash()); - if (r.getHash().equals(file_hash)) { - System.out.println("Best resource GUID: " + r.getGUID()); - GUID = r.getGUID(); - break; - } - } - - } else { - System.out.println("The hash of these files is different, you need to specify the GUID"); - System.out.println("Please specify the GUID of the resource: "); - try { - GUID = UUID.fromString(sc.nextLine()); - } catch (IllegalArgumentException e) { - System.out.println("UUID Error"); - return; - } - } - if (GUID == null) { - System.out.println("UUID Error"); - return; - } - Resource resource = resources.get(GUID); - if (resource == null) { - System.out.println("Input GUID not in DHRT"); - return; - } - Peer p = (Peer) resource.possessedBy.values().stream().sorted().toArray()[0]; - P2P_download(p, resource); - } else { - Resource resource = (Resource) resources.values().toArray()[0]; - if (resource == null) - return; - Peer p = (Peer) resource.possessedBy.values().stream().sorted().toArray()[0]; - P2P_download(p, resource); + ArrayList processed_peers = new ArrayList<>(); + for (Peer p : resources.possessedBy.values()) { + processed_peers.add(p); } - } - - public static void sync_DHRT() { - HashMap hashMap = null; - try { - System.out.println("Start syncUHRT"); - hashMap = syncingRegistry.syncUHRT(); - DHRT.putAll(hashMap); - } catch (RemoteException e) { - e.printStackTrace(); - } - System.out.println("END syncUHRT"); + processed_peers.sort(new Comparator() { + @Override + public int compare(Peer o1, Peer o2) { + return o1.getRoutingMetric() - o2.getRoutingMetric(); + } + }); + Peer best_peer = processed_peers.get(0); + System.out.println("Best peer is: " + best_peer.getGUID()); + P2P_download(best_peer, resources); } public static void P2P_download(Peer p, Resource resource) { @@ -433,10 +348,13 @@ public class ClientMain { } catch (RemoteException e) { System.out.println("RemoteException"); + DHRT.clear(); try { - HashMap hashMap = syncingRegistry.syncUHRT(); - DHRT.putAll(hashMap); - download(resource.getName(), download_retry_count); + Resource res = fileLookupRegistry.lookupInUHRT(resource.getGUID()); + if (res != null) + DHRT.put(res.getGUID(), res); + System.out.println("Try to update DHRT."); + download(resource.getGUID(), download_retry_count); return; } catch (RemoteException ex) { ex.printStackTrace(); @@ -503,10 +421,12 @@ public class ClientMain { } catch (RemoteException e) { System.out.println("RemoteException"); + DHRT.clear(); try { - HashMap hashMap = syncingRegistry.syncUHRT(); - DHRT.putAll(hashMap); - download(resource.getName(), download_retry_count); + Resource res = fileLookupRegistry.lookupInUHRT(resource.getGUID()); + if (res != null) + DHRT.put(res.getGUID(), res); + download(resource.getGUID(), download_retry_count); return; } catch (RemoteException ex) { ex.printStackTrace(); @@ -532,7 +452,7 @@ public class ClientMain { // } catch (RemoteException e) { // System.out.println("Retry Failed !"); // try { -// DHRT = syncingRegistry.syncUHRT(); +// DHRT = syncingRegistry.lookupInUHRT(); // System.out.println("Retrying " + retry_count); // if (retry_count <= 5) { // try { diff --git a/src/main/java/com/echo/p2p_project/client/gui/ClientIndexController.java b/src/main/java/com/echo/p2p_project/client/gui/ClientIndexController.java index ca96f99..85a01c9 100644 --- a/src/main/java/com/echo/p2p_project/client/gui/ClientIndexController.java +++ b/src/main/java/com/echo/p2p_project/client/gui/ClientIndexController.java @@ -53,9 +53,9 @@ public class ClientIndexController { public void initialize() { ObservableList local_file_list = new ObservableListWrapper<>(Collections.synchronizedList(new ArrayList<>())); ObservableList remote_file_list = new ObservableListWrapper<>(Collections.synchronizedList(new ArrayList<>())); - ClientMain.DHRT.addListener(new MapChangeListener() { + ClientMain.DHRT.addListener(new MapChangeListener() { @Override - public void onChanged(Change change) { + public void onChanged(Change change) { log_field.appendText(change.toString()); ObservableList resources = new ObservableListWrapper(new ArrayList<>(ClientMain.DHRT.values())); DHRT_Table.setItems(resources); @@ -186,7 +186,7 @@ public class ClientIndexController { } catch (InterruptedException e) { e.printStackTrace(); } - ClientMain.sync_DHRT(); +// ClientMain.sync_DHRT(); } }).start(); @@ -222,7 +222,7 @@ public class ClientIndexController { sync_button.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { - ClientMain.sync_DHRT(); +// ClientMain.sync_DHRT(); } }); reg_button.setOnAction(new EventHandler() { diff --git a/src/main/java/com/echo/p2p_project/client/interfaces/P2P_FileRegistry.java b/src/main/java/com/echo/p2p_project/client/interfaces/P2P_FileRegistry.java index dd84967..a59821e 100644 --- a/src/main/java/com/echo/p2p_project/client/interfaces/P2P_FileRegistry.java +++ b/src/main/java/com/echo/p2p_project/client/interfaces/P2P_FileRegistry.java @@ -13,5 +13,5 @@ import java.util.UUID; * @Description: **/ public interface P2P_FileRegistry extends Remote { - byte[] download(UUID resID) throws RemoteException; + byte[] download(String resID) throws RemoteException; } diff --git a/src/main/java/com/echo/p2p_project/client/model/P2PFileImpl.java b/src/main/java/com/echo/p2p_project/client/model/P2PFileImpl.java index ec22070..e1f427b 100644 --- a/src/main/java/com/echo/p2p_project/client/model/P2PFileImpl.java +++ b/src/main/java/com/echo/p2p_project/client/model/P2PFileImpl.java @@ -35,7 +35,7 @@ public class P2PFileImpl extends UnicastRemoteObject implements P2P_FileRegistry @Override - public byte[] download(UUID resID) throws RemoteException{ + public byte[] download(String resID) throws RemoteException{ System.out.println("Income connection."); Resource resource = ClientMain.DHRT.get(resID); if(resource == null){ diff --git a/src/main/java/com/echo/p2p_project/server/ServerMain.java b/src/main/java/com/echo/p2p_project/server/ServerMain.java index b365d34..6a0bccb 100644 --- a/src/main/java/com/echo/p2p_project/server/ServerMain.java +++ b/src/main/java/com/echo/p2p_project/server/ServerMain.java @@ -1,17 +1,14 @@ package com.echo.p2p_project.server; -import com.echo.p2p_project.Util; import com.echo.p2p_project.server.interfaces.ConstructRegistry; import com.echo.p2p_project.server.interfaces.HeartBeatRegistry; import com.echo.p2p_project.server.interfaces.HelloRegistryFacade; -import com.echo.p2p_project.server.interfaces.SyncingRegistry; +import com.echo.p2p_project.server.interfaces.FileLookupRegistry; import com.echo.p2p_project.server.model.*; import com.echo.p2p_project.u_model.Peer; import com.echo.p2p_project.u_model.Resource; import com.sun.javafx.collections.ObservableMapWrapper; -import javafx.collections.ObservableMap; -import java.io.PrintStream; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; @@ -27,7 +24,7 @@ import java.util.*; public class ServerMain{ public static final int RMI_PORT = 1099; public static ObservableMapWrapper UHPT = new ObservableMapWrapper<>(new LinkedHashMap<>()); - public static ObservableMapWrapper UHRT = new ObservableMapWrapper<>(new LinkedHashMap<>()); + public static ObservableMapWrapper UHRT = new ObservableMapWrapper<>(new LinkedHashMap<>()); private static Registry registry; private static Boolean HasStarted = false; private static Thread service; @@ -91,12 +88,12 @@ public class ServerMain{ HelloRegistryFacade hello = new HelloRegistryFacadeImpl(); ConstructRegistry constructRegistry = new ConstructImpl(); HeartBeatRegistry heartBeatRegistry = new HeartBeatImpl(); - SyncingRegistry syncingRegistry = new SyncingImpl(); + FileLookupRegistry fileLookupRegistry = new FileLookupImpl(); registry.rebind("HelloRegistry", hello); registry.rebind("constructRegistry", constructRegistry); registry.rebind("heatBeatRegistry", heartBeatRegistry); - registry.rebind("syncingRegistry", syncingRegistry); + registry.rebind("syncingRegistry", fileLookupRegistry); } catch (RemoteException e) { e.printStackTrace(); diff --git a/src/main/java/com/echo/p2p_project/server/gui/ServerIndexController.java b/src/main/java/com/echo/p2p_project/server/gui/ServerIndexController.java index 73bc416..f35ccd9 100644 --- a/src/main/java/com/echo/p2p_project/server/gui/ServerIndexController.java +++ b/src/main/java/com/echo/p2p_project/server/gui/ServerIndexController.java @@ -16,6 +16,8 @@ import javafx.scene.control.*; import javafx.util.Callback; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; /** * @Author: WangYuyang @@ -37,7 +39,7 @@ public class ServerIndexController { public TableColumn UHRT_GUID; public TableColumn UHRT_NAME; public BarChart bar_chart; - public TableColumn UHRT_HASH; + public TableColumn UHRT_By; XYChart.Series bar_data = new XYChart.Series(); @@ -72,15 +74,54 @@ public class ServerIndexController { return new SimpleStringProperty(param.getValue().getName().toString()); } }); - UHRT_HASH.setCellValueFactory(new Callback, ObservableValue>() { + UHRT_By.setCellValueFactory(new Callback, ObservableValue>() { @Override public ObservableValue call(TableColumn.CellDataFeatures param) { - return new SimpleStringProperty(param.getValue().getHash().toString()); + return new SimpleStringProperty(String.valueOf(param.getValue().possessedBy.size())); } }); bar_chart.getData().add(bar_data); + Timer timer = new Timer(); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + Platform.runLater(new Runnable() { + @Override + public void run() { + //update table + ObservableList peers = new ObservableListWrapper(new ArrayList<>(ServerMain.UHPT.values())); + uhpt_table.setItems(peers); + + //update table + ObservableList resources = new ObservableListWrapper(new ArrayList<>(ServerMain.UHRT.values())); + uhrt_table.setItems(resources); + + + //update tree + TreeItem rootItem = new TreeItem("Server"); + rootItem.setExpanded(true); + for (Peer p : peers) { + TreeItem item = new TreeItem(p.getGUID().toString()); + for (Resource r : p.possessing.values()) { + item.setExpanded(true); + TreeItem filename = new TreeItem(r.getName().toString()); + item.getChildren().add(filename); + } + rootItem.getChildren().add(item); + + } + uhrt_tree.setRoot(rootItem); + + // + setBarChartData(); + + } + }); + } + }, 0, 1000); + ServerMain.UHPT.addListener(new MapChangeListener() { @Override public void onChanged(Change change) { diff --git a/src/main/java/com/echo/p2p_project/server/interfaces/SyncingRegistry.java b/src/main/java/com/echo/p2p_project/server/interfaces/FileLookupRegistry.java similarity index 63% rename from src/main/java/com/echo/p2p_project/server/interfaces/SyncingRegistry.java rename to src/main/java/com/echo/p2p_project/server/interfaces/FileLookupRegistry.java index 9f1ddf7..00dcf7a 100644 --- a/src/main/java/com/echo/p2p_project/server/interfaces/SyncingRegistry.java +++ b/src/main/java/com/echo/p2p_project/server/interfaces/FileLookupRegistry.java @@ -1,6 +1,7 @@ package com.echo.p2p_project.server.interfaces; import com.echo.p2p_project.u_model.Peer; +import com.echo.p2p_project.u_model.Resource; import java.rmi.Remote; import java.rmi.RemoteException; @@ -14,7 +15,8 @@ import java.util.UUID; * @Package: com.echo.p2p_project.server.interfaces * @Description: **/ -public interface SyncingRegistry extends Remote { +public interface FileLookupRegistry extends Remote { Peer syncPeer(UUID GUID) throws RemoteException; - HashMap syncUHRT() throws RemoteException; +// HashMap lookupInUHRT(String filename) throws RemoteException; + Resource lookupInUHRT(String hash) throws RemoteException; } diff --git a/src/main/java/com/echo/p2p_project/server/model/ConstructImpl.java b/src/main/java/com/echo/p2p_project/server/model/ConstructImpl.java index 46996b8..e5e1edc 100644 --- a/src/main/java/com/echo/p2p_project/server/model/ConstructImpl.java +++ b/src/main/java/com/echo/p2p_project/server/model/ConstructImpl.java @@ -51,7 +51,6 @@ public class ConstructImpl extends UnicastRemoteObject implements ConstructRegis System.out.println("Peer Reg: " + peer); return peer; } - @Override public Resource ConstructResource(UUID PeerGUID, String name, String hash) throws RemoteException { Peer peer = ServerMain.UHPT.get(PeerGUID); @@ -60,20 +59,47 @@ public class ConstructImpl extends UnicastRemoteObject implements ConstructRegis if(peer == null) return null; // Res register failed - - UUID GUID = UUID.randomUUID(); //If duplicated GUID - if(ServerMain.UHPT.containsKey(GUID)) { - System.out.println("DUP GUID!!!!!!!"); - return null; // Res register failed + if(ServerMain.UHRT.containsKey(hash)) { + // Res is in UHRT + System.out.println("DUP GUID! Res is in UHRT"); + Resource res = ServerMain.UHRT.get(hash); + res.possessedBy.put(peer.getGUID(), peer); + ServerMain.UHPT.get(peer.getGUID()).possessing.put(res.getGUID(), res); + return res; } String ResName = name; - Resource res = new Resource(GUID, ResName, hash); + Resource res = new Resource(hash, ResName, hash); res.possessedBy.put(peer.getGUID(), peer); ServerMain.UHRT.put(res.getGUID(), res); ServerMain.UHPT.get(peer.getGUID()).possessing.put(res.getGUID(), res); System.out.println("Resources Registered: " + res); return res; } + +// @Override +// public Resource ConstructResource(UUID PeerGUID, String name, String hash) throws RemoteException { +// Peer peer = ServerMain.UHPT.get(PeerGUID); +// +// //If peer not registered in center +// if(peer == null) +// return null; // Res register failed +// +// +// UUID GUID = UUID.randomUUID(); +// //If duplicated GUID +// if(ServerMain.UHPT.containsKey(GUID)) { +// System.out.println("DUP GUID!!!!!!!"); +// return null; // Res register failed +// } +// +// String ResName = name; +// Resource res = new Resource(GUID, ResName, hash); +// res.possessedBy.put(peer.getGUID(), peer); +// ServerMain.UHRT.put(res.getGUID(), res); +// ServerMain.UHPT.get(peer.getGUID()).possessing.put(res.getGUID(), res); +// System.out.println("Resources Registered: " + res); +// return res; +// } } diff --git a/src/main/java/com/echo/p2p_project/server/model/FileLookupImpl.java b/src/main/java/com/echo/p2p_project/server/model/FileLookupImpl.java new file mode 100644 index 0000000..9a30e24 --- /dev/null +++ b/src/main/java/com/echo/p2p_project/server/model/FileLookupImpl.java @@ -0,0 +1,126 @@ +package com.echo.p2p_project.server.model; + +import com.echo.p2p_project.server.ServerMain; +import com.echo.p2p_project.server.interfaces.FileLookupRegistry; +import com.echo.p2p_project.u_model.Peer; +import com.echo.p2p_project.u_model.Resource; + +import java.rmi.RemoteException; +import java.rmi.server.RMISocketFactory; +import java.rmi.server.UnicastRemoteObject; +import java.util.*; + +/** + * @Author: WangYuyang + * @Date: 2021/10/20-22:45 + * @Project: P2P_Project + * @Package: com.echo.p2p_project.server.model + * @Description: + **/ +public class FileLookupImpl extends UnicastRemoteObject implements FileLookupRegistry { + /** + * Creates and exports a new UnicastRemoteObject object using an + * anonymous port. + * + *

The object is exported with a server socket + * created using the {@link RMISocketFactory} class. + * + * @throws RemoteException if failed to export object + * @since JDK1.1 + */ + public FileLookupImpl() throws RemoteException { + super(); + } + + @Override + public Peer syncPeer(UUID GUID) throws RemoteException { + Peer peer = ServerMain.UHPT.get(GUID); + if (peer == null) + return null; + return peer; + } + + @Override + public Resource lookupInUHRT(String hash) throws RemoteException { + + Resource res = ServerMain.UHRT.get(hash); + if(res==null){ + return null; + } + ArrayList processed_peers = new ArrayList<>(); + for (Peer p : res.possessedBy.values()) { + processed_peers.add(p); + } + processed_peers.sort(new Comparator() { + @Override + public int compare(Peer o1, Peer o2) { + return o1.getRoutingMetric() - o2.getRoutingMetric(); + } + }); + Peer best_peer = processed_peers.get(0); + for (Peer peer: processed_peers) { + System.out.println(peer.getGUID() + " <> " + peer.getRoutingMetric()); + } + System.out.println("BEST: " + best_peer.getGUID()); + Resource tmp = new Resource(res.getGUID(), res.getName(), res.getHash()); + tmp.possessedBy.put(best_peer.getGUID(), best_peer); + + return tmp; + } + + +// @Override +// public HashMap lookupInUHRT(String filename) throws RemoteException { +// HashMap hashMap = new LinkedHashMap(); +// +// for (UUID key : ServerMain.UHRT.keySet()) { +// if (ServerMain.UHRT.get(key).getName().equals(filename)) { +// hashMap.put(key, ServerMain.UHRT.get(key)); +// } +// } +// +// System.out.println("Checking file hashing..."); +// Boolean hash_all_same = true; +// String file_hash = ((Resource) hashMap.values().toArray()[0]).getHash(); +// for (Resource r : hashMap.values()) { +// if (!r.getHash().equals(file_hash)) { +// hash_all_same = false; +// break; +// } +// } +// UUID GUID = null; +// if (hash_all_same) { +// System.out.println("Hash is the same, looking for best node..."); +// ArrayList processed_peers = new ArrayList<>(); +// for (Resource r : hashMap.values()) { +// for (Peer p : r.possessedBy.values()) { +// processed_peers.add(p); +// } +// } +// processed_peers.sort(new Comparator() { +// @Override +// public int compare(Peer o1, Peer o2) { +// return o1.getRoutingMetric() - o2.getRoutingMetric(); +// } +// }); +// for (Peer p : processed_peers) { +// System.out.println(p.getGUID().toString() + " <> " + p.getRoutingMetric()); +// } +// +// for (Resource r : processed_peers.get(0).possessing.values()) { +// System.out.println("File hash: " + file_hash); +// System.out.println("Res hash : " + r.getHash()); +// if (r.getHash().equals(file_hash)) { +// System.out.println("Best resource GUID: " + r.getGUID()); +// System.out.println("Best Peer GUID: " + processed_peers.get(0).getGUID()); +// GUID = r.getGUID(); +// HashMap tmp = new LinkedHashMap(); +// tmp.put(GUID, ServerMain.UHRT.get(GUID)); +// return tmp; +// } +// } +// } +// +// return hashMap; +// } +} diff --git a/src/main/java/com/echo/p2p_project/server/model/SyncingImpl.java b/src/main/java/com/echo/p2p_project/server/model/SyncingImpl.java deleted file mode 100644 index 195ebae..0000000 --- a/src/main/java/com/echo/p2p_project/server/model/SyncingImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.echo.p2p_project.server.model; - -import com.echo.p2p_project.server.ServerMain; -import com.echo.p2p_project.server.interfaces.SyncingRegistry; -import com.echo.p2p_project.u_model.Peer; - -import java.rmi.RemoteException; -import java.rmi.server.RMISocketFactory; -import java.rmi.server.UnicastRemoteObject; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.UUID; - -/** - * @Author: WangYuyang - * @Date: 2021/10/20-22:45 - * @Project: P2P_Project - * @Package: com.echo.p2p_project.server.model - * @Description: - **/ -public class SyncingImpl extends UnicastRemoteObject implements SyncingRegistry { - /** - * Creates and exports a new UnicastRemoteObject object using an - * anonymous port. - * - *

The object is exported with a server socket - * created using the {@link RMISocketFactory} class. - * - * @throws RemoteException if failed to export object - * @since JDK1.1 - */ - public SyncingImpl() throws RemoteException { - super(); - } - - @Override - public Peer syncPeer(UUID GUID) throws RemoteException{ - Peer peer = ServerMain.UHPT.get(GUID); - if (peer==null) - return null; - return peer; - } - - @Override - public HashMap syncUHRT() throws RemoteException { - HashMap hashMap = new LinkedHashMap(); - for (UUID key: ServerMain.UHRT.keySet()) { - hashMap.put(key, ServerMain.UHRT.get(key)); - } - HashMap map = hashMap; - return map; - } -} diff --git a/src/main/java/com/echo/p2p_project/server/model/WatchDog.java b/src/main/java/com/echo/p2p_project/server/model/WatchDog.java index 819a988..02a6e06 100644 --- a/src/main/java/com/echo/p2p_project/server/model/WatchDog.java +++ b/src/main/java/com/echo/p2p_project/server/model/WatchDog.java @@ -2,7 +2,9 @@ package com.echo.p2p_project.server.model; import com.echo.p2p_project.server.ServerMain; import com.echo.p2p_project.u_model.Peer; +import com.echo.p2p_project.u_model.Resource; +import java.awt.geom.RectangularShape; import java.util.UUID; /** @@ -42,9 +44,15 @@ public class WatchDog { System.out.println(); System.out.println("==================================== REMOVE ====================================="); System.out.println("PEER (peer MissedHartBeat > 5): " + uuid); - for (UUID guid : ServerMain.UHPT.get(uuid).possessing.keySet()) { + for (String guid : ServerMain.UHPT.get(uuid).possessing.keySet()) { System.out.println("Resources: " + guid); - ServerMain.UHRT.remove(guid); + Resource resource = ServerMain.UHRT.get(guid); + if(resource.possessedBy.size() == 1) { + ServerMain.UHRT.remove(guid); + } + else { + resource.possessedBy.remove(uuid); + } } ServerMain.UHPT.remove(uuid); System.out.println("================================================================================="); diff --git a/src/main/java/com/echo/p2p_project/u_model/Peer.java b/src/main/java/com/echo/p2p_project/u_model/Peer.java index 4836408..761ae77 100644 --- a/src/main/java/com/echo/p2p_project/u_model/Peer.java +++ b/src/main/java/com/echo/p2p_project/u_model/Peer.java @@ -26,7 +26,7 @@ public class Peer implements Serializable,Comparable { private Integer routingMetric; private Integer MissedHartBeat = 0; //Only use this possessing in DHRT - public HashMap possessing = new LinkedHashMap(); + public HashMap possessing = new LinkedHashMap(); public Peer(UUID GUID, String name, String IP, Integer p2P_port, Integer routingMetric) { this.GUID = GUID; @@ -76,11 +76,11 @@ public class Peer implements Serializable,Comparable { this.routingMetric = routingMetric; } - public HashMap getPossessing() { + public HashMap getPossessing() { return possessing; } - public void setPossessing(HashMap possessing) { + public void setPossessing(HashMap possessing) { this.possessing = possessing; } diff --git a/src/main/java/com/echo/p2p_project/u_model/Resource.java b/src/main/java/com/echo/p2p_project/u_model/Resource.java index 6855835..54900dc 100644 --- a/src/main/java/com/echo/p2p_project/u_model/Resource.java +++ b/src/main/java/com/echo/p2p_project/u_model/Resource.java @@ -15,27 +15,27 @@ import java.util.UUID; * @Description: **/ public class Resource implements Serializable { - private UUID GUID; + private String GUID; private String name; public HashMap possessedBy = new LinkedHashMap<>(); public String hash; - public Resource(UUID GUID, String name) { + public Resource(String GUID, String name) { this.GUID = GUID; this.name = name; } - public Resource(UUID GUID, String name, String hash) { + public Resource(String GUID, String name, String hash) { this.GUID = GUID; this.name = name; this.hash = hash; } - public UUID getGUID() { + public String getGUID() { return GUID; } - public void setGUID(UUID GUID) { + public void setGUID(String GUID) { this.GUID = GUID; } diff --git a/src/main/resources/gui/server_index.fxml b/src/main/resources/gui/server_index.fxml index a6a592c..64bb4e6 100644 --- a/src/main/resources/gui/server_index.fxml +++ b/src/main/resources/gui/server_index.fxml @@ -82,7 +82,7 @@ - + diff --git a/target/classes/gui/server_index.fxml b/target/classes/gui/server_index.fxml index a6a592c..64bb4e6 100644 --- a/target/classes/gui/server_index.fxml +++ b/target/classes/gui/server_index.fxml @@ -82,7 +82,7 @@ - +