王宇洋 3 years ago
parent 745e07c286
commit 6efd612bc6

@ -0,0 +1,20 @@
<component name="ArtifactManager">
<artifact type="jar" name="ClientGUI:jar">
<output-path>$PROJECT_DIR$/out/artifacts/ClientGUI_jar</output-path>
<root id="archive" name="P2P_Project.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/Client_GUI-META-INF/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="P2P_Project" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/cn/hutool/hutool-all/5.7.13/hutool-all-5.7.13.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2-mac.jar" path-in-jar="/" />
</root>
</artifact>
</component>

@ -1,20 +1,20 @@
<component name="ArtifactManager">
<artifact type="jar" name="Client">
<output-path>$PROJECT_DIR$/out/artifacts/Client</output-path>
<artifact type="jar" name="Client:jar">
<output-path>$PROJECT_DIR$/out/artifacts/Client_jar</output-path>
<root id="archive" name="P2P_Project.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/Client-META-INF/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="P2P_Project" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/cn/hutool/hutool-all/5.7.13/hutool-all-5.7.13.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2-mac.jar" path-in-jar="/" />
</root>
</artifact>
</component>

@ -0,0 +1,20 @@
<component name="ArtifactManager">
<artifact type="jar" name="ServerGUI:jar">
<output-path>$PROJECT_DIR$/out/artifacts/ServerGUI_jar</output-path>
<root id="archive" name="P2P_Project.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/Server_GUI-META-INF/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="P2P_Project" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/cn/hutool/hutool-all/5.7.13/hutool-all-5.7.13.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2-mac.jar" path-in-jar="/" />
</root>
</artifact>
</component>

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.echo.p2p_project.client.gui.ClientIndexView

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.echo.p2p_project.server.gui.ServerIndexApplication

@ -1,5 +0,0 @@
hahaha
================
This File is 1.a
================

@ -1,5 +0,0 @@
2222222222222222
================
This File is 2.a
================

@ -1,5 +0,0 @@
hahaha
================
This File is 1.a
================

@ -1,5 +0,0 @@
0000000000000000
================
This File is 0.a
================

@ -1,5 +0,0 @@
2222222222222222
================
This File is 2.a
================

@ -1,3 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.echo.p2p_project.server.ServerMain
Main-Class: com.echo.p2p_project.client.gui.ClientIndexView

@ -16,8 +16,6 @@ import com.echo.p2p_project.u_model.Resource;
import com.sun.javafx.collections.ObservableMapWrapper;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.rmi.ConnectException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
@ -246,7 +244,7 @@ public class ClientMain {
System.out.println("Peer Sync Finished !");
}
private static HashMap<UUID, Resource> look_up_file(String file_name) {
public static HashMap<UUID, Resource> look_up_file(String file_name) {
HashMap<UUID, Resource> result = new LinkedHashMap<>();
System.out.println("Looking for: " + file_name);
for (Resource r : DHRT.values()) {
@ -326,7 +324,7 @@ public class ClientMain {
}
});
for (Peer p : processed_peers) {
System.out.println(p.getGUID().toString()+" <> " + p.getRoutingMetric());
System.out.println(p.getGUID().toString() + " <> " + p.getRoutingMetric());
}
for (Resource r : processed_peers.get(0).possessing.values()) {
@ -368,7 +366,8 @@ public class ClientMain {
P2P_download(p, resource);
}
}
public static void sync_DHRT(){
public static void sync_DHRT() {
HashMap hashMap = null;
try {
System.out.println("Start syncUHRT");
@ -381,50 +380,143 @@ public class ClientMain {
}
public static void P2P_download(Peer p, Resource resource) {
Integer port = p.getP2P_port();
String IP = p.getIP();
Registry p2pRegistry = null;
File file = null;
try {
p2pRegistry = LocateRegistry.getRegistry(IP, port);
System.out.println("Try to connect: " + p.getGUID());
P2P_FileRegistry p2PFileRegistry = (P2P_FileRegistry) p2pRegistry.lookup("p2PFileRegistry");
System.out.println("Connected.");
System.out.println("Downloading FROM: " + p.getGUID());
byte[] file_byte = p2PFileRegistry.download(resource.getGUID());
System.out.println("File byte[] length: " + file_byte.length);
file = FileUtil.writeBytes(file_byte, new File("res/" + resource.getName()));
new Thread(new Runnable() {
@Override
public void run() {
long start_time = System.currentTimeMillis();
Integer port = p.getP2P_port();
String IP = p.getIP();
Registry p2pRegistry = null;
File file = null;
try {
p2pRegistry = LocateRegistry.getRegistry(IP, port);
System.out.println("Try to connect: " + p.getGUID());
P2P_FileRegistry p2PFileRegistry = (P2P_FileRegistry) p2pRegistry.lookup("p2PFileRegistry");
System.out.println("Connected.");
System.out.println("Downloading FROM: " + p.getGUID());
byte[] file_byte = p2PFileRegistry.download(resource.getGUID());
System.out.println("File byte[] length: " + file_byte.length);
long end_time = System.currentTimeMillis();
long start_writing_time = System.currentTimeMillis();
file = FileUtil.writeBytes(file_byte, new File("download/" + peer.getGUID() + "_FROM_" + p.getGUID() + "_" + resource.getName()));
long end_writing_time = System.currentTimeMillis();
System.out.println("File downloaded !");
System.out.println("File length : " + file.length());
float file_size_B = file.length();
float file_size_KB = file.length() / 1024;
float file_size_MB = file_size_KB / 1024;
if (file_size_KB <= 1) {
System.out.println("################# Download Finished #################");
System.out.println("Network COST: " + (end_time - start_time) + " ms.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_B + " Byte.");
System.out.println("Average Speed: " + file_size_B / ((end_time - start_time) / 1000) + " Byte/s.");
System.out.println("#####################################################");
} else {
if (file_size_MB <= 1) {
System.out.println("################# Download Finished #################");
System.out.println("COST: " + (end_time - start_time) + " ms.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_KB + " KB.");
System.out.println("Average Speed: " + file_size_KB / ((end_time - start_time) / 1000) + " KB/s.");
System.out.println("#####################################################");
} else {
System.out.println("################# Download Finished #################");
System.out.println("COST: " + (end_time - start_time) / 1000 + " s.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_MB + " MB.");
System.out.println("Average Speed: " + file_size_MB / ((end_time - start_time) / 1000) + " MB/s.");
System.out.println("#####################################################");
}
}
} catch (RemoteException e) {
System.out.println("RemoteException");
try {
HashMap hashMap = syncingRegistry.syncUHRT();
DHRT.putAll(hashMap);
download(resource.getName(), download_retry_count);
return;
} catch (RemoteException ex) {
ex.printStackTrace();
} catch (RemoteException e) {
System.out.println("RemoteException");
try {
HashMap hashMap = syncingRegistry.syncUHRT();
DHRT.putAll(hashMap);
download(resource.getName(), download_retry_count);
return;
} catch (RemoteException ex) {
ex.printStackTrace();
}
} catch (NotBoundException e) {
e.printStackTrace();
}
}
// e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
if (file != null) {
System.out.println("File downloaded !");
System.out.println("File length : " + file.length());
}).start();
}
try {
FileUtil.writeToStream(file, new FileOutputStream("download/" + peer.getGUID() + "_FROM_" + p.getGUID() + "_" + resource.getName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
System.out.println("P2P_download File Error");
return;
}
public static void P2P_download(Peer p, Resource resource, Runnable runnable) {
new Thread(new Runnable() {
@Override
public void run() {
long start_time = System.currentTimeMillis();
Integer port = p.getP2P_port();
String IP = p.getIP();
Registry p2pRegistry = null;
File file = null;
try {
p2pRegistry = LocateRegistry.getRegistry(IP, port);
System.out.println("Try to connect: " + p.getGUID());
P2P_FileRegistry p2PFileRegistry = (P2P_FileRegistry) p2pRegistry.lookup("p2PFileRegistry");
System.out.println("Connected.");
System.out.println("Downloading FROM: " + p.getGUID());
byte[] file_byte = p2PFileRegistry.download(resource.getGUID());
System.out.println("File byte[] length: " + file_byte.length);
long end_time = System.currentTimeMillis();
long start_writing_time = System.currentTimeMillis();
file = FileUtil.writeBytes(file_byte, new File("download/" + peer.getGUID() + "_FROM_" + p.getGUID() + "_" + resource.getName()));
long end_writing_time = System.currentTimeMillis();
System.out.println("File downloaded !");
System.out.println("File length : " + file.length());
float file_size_B = file.length();
float file_size_KB = file.length() / 1024;
float file_size_MB = file_size_KB / 1024;
if (file_size_KB <= 1) {
System.out.println("################# Download Finished #################");
System.out.println("Network COST: " + (end_time - start_time) + " ms.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_B + " Byte.");
System.out.println("Average Speed: " + file_size_B / ((end_time - start_time) / 1000) + " Byte/s.");
System.out.println("#####################################################");
} else {
if (file_size_MB <= 1) {
System.out.println("################# Download Finished #################");
System.out.println("COST: " + (end_time - start_time) + " ms.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_KB + " KB.");
System.out.println("Average Speed: " + file_size_KB / ((end_time - start_time) / 1000) + " KB/s.");
System.out.println("#####################################################");
} else {
System.out.println("################# Download Finished #################");
System.out.println("COST: " + (end_time - start_time) / 1000 + " s.");
System.out.println("Disk COST: " + (end_writing_time - start_writing_time) + " ms.");
System.out.println("DATA Size: " + file_size_MB + " MB.");
System.out.println("Average Speed: " + file_size_MB / ((end_time - start_time) / 1000) + " MB/s.");
System.out.println("#####################################################");
}
}
} catch (RemoteException e) {
System.out.println("RemoteException");
try {
HashMap hashMap = syncingRegistry.syncUHRT();
DHRT.putAll(hashMap);
download(resource.getName(), download_retry_count);
return;
} catch (RemoteException ex) {
ex.printStackTrace();
}
} catch (NotBoundException e) {
e.printStackTrace();
}
runnable.run();
}
}).start();
}
//
// private static void P2P_download(Peer p, Resource resource, Integer retry_count) {

@ -0,0 +1,31 @@
package com.echo.p2p_project.client;
import java.rmi.ConnectException;
/**
* @Author: WangYuyang
* @Date: 2021/10/27-22:48
* @Project: P2P_Project
* @Package: com.echo.p2p_project.client
* @Description:
**/
public class Test {
public static void main(String[] args) {
for(int i = 0; i < 5000; i++){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
ClientMain.recover();
}
}).start();
}
}
}

@ -47,6 +47,8 @@ public class ClientIndexController {
public TableColumn<Resource, String> DHRT_NAME;
public TableColumn<Resource, String> DHRT_HASH;
public Button sync_button;
public TextField lookup_filename;
public Button lookup_button;
public void initialize() {
ObservableList<String> local_file_list = new ObservableListWrapper<>(Collections.synchronizedList(new ArrayList<>()));
@ -68,7 +70,7 @@ public class ClientIndexController {
remote_file_list.remove(change.getValueRemoved());
}
}
if(remote_file_list.size() >= 1){
if (remote_file_list.size() >= 1) {
download_datalist.setValue(remote_file_list.get(0));
}
}
@ -78,12 +80,19 @@ public class ClientIndexController {
});
download_datalist.setItems(remote_file_list);
File[] files = FileUtil.ls(System.getProperty("user.dir") + "/res/");
local_file_list.clear();
for (File f : files) {
local_file_list.add(f.getName());
try {
File[] files = FileUtil.ls(System.getProperty("user.dir") + "/res/");
local_file_list.clear();
for (File f : files) {
local_file_list.add(f.getName());
}
} catch (Exception e) {
System.out.println("Download DIR: " + System.getProperty("user.dir") + "/download/");
System.out.println("Resource DIR: " + System.getProperty("user.dir") + "/res/");
FileUtil.mkdir(System.getProperty("user.dir") + "/download/");
FileUtil.mkdir(System.getProperty("user.dir") + "/res/");
}
//这里只监听文件或目录的修改事件
// 修改res-> 0.a
// 修改res-> 0.a
@ -107,6 +116,8 @@ public class ClientIndexController {
for (File f : files) {
local_file_list.add(f.getName());
}
if (local_file_list.size() >= 1)
download_datalist.setValue(local_file_list.get(0));
}
});
}
@ -123,6 +134,8 @@ public class ClientIndexController {
for (File f : files) {
local_file_list.add(f.getName());
}
if (local_file_list.size() >= 1)
download_datalist.setValue(local_file_list.get(0));
}
});
@ -140,6 +153,8 @@ public class ClientIndexController {
for (File f : files) {
local_file_list.add(f.getName());
}
if (local_file_list.size() >= 1)
download_datalist.setValue(local_file_list.get(0));
}
});
}
@ -178,6 +193,7 @@ public class ClientIndexController {
download_button.setDisable(false);
reg_button.setDisable(false);
sync_button.setDisable(false);
lookup_button.setDisable(false);
}
});
@ -220,7 +236,12 @@ public class ClientIndexController {
download_button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Resource r = (Resource) download_datalist.getValue();
Resource r = null;
try {
r = (Resource) download_datalist.getValue();
} catch (Exception e) {
return;
}
if (r != null) {
System.out.println(r);
ArrayList<Peer> processed_peers = new ArrayList<>();
@ -236,12 +257,33 @@ public class ClientIndexController {
for (Peer p : processed_peers) {
System.out.println(p.getGUID().toString() + " <> " + p.getRoutingMetric());
}
ClientMain.P2P_download(processed_peers.get(0), r);
Dialog dialog = new Dialog();
dialog.show();
ClientMain.P2P_download(processed_peers.get(0), r, new Runnable() {
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Information Dialog");
alert.setHeaderText("File downloaded");
alert.setContentText("Please check in your download folder!");
alert.showAndWait();
}
});
}
});
}
}
});
lookup_button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String filename = lookup_filename.getText();
ClientMain.look_up_file(filename);
}
});
}

@ -26,7 +26,10 @@ public class CHeartBeat {
System.out.println("Start Heart Beat");
while (running) {
try {
long start = System.currentTimeMillis();
Boolean status = heartBeatRegistry.heartBeat(GUID);
long end = System.currentTimeMillis();
System.out.println( this.toString() + ": " + (end - start));
// System.out.println(status);
ClientMain.retry_times = 0;
} catch (RemoteException e) {

@ -163,6 +163,7 @@ public class ServerIndexController {
}
private void setBarChartData() {
bar_data.getData().clear();
for (int i = 0; i < ServerMain.UHPT.values().size(); i++) {
Peer p = (Peer) ServerMain.UHPT.values().toArray()[i];
Boolean contains = false;

@ -2,7 +2,6 @@ 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.util.UUID;
@ -22,9 +21,16 @@ public class WatchDog {
@Override
public void run() {
while (running) {
UUID uuid = null;
for (int i = 0; i < ServerMain.UHPT.size(); i++) {
UUID uuid = (UUID) ServerMain.UHPT.keySet().toArray()[i];
try {
uuid = (UUID) ServerMain.UHPT.keySet().toArray()[i];
} catch (Exception e) {
}
Peer p = ServerMain.UHPT.get(uuid);
if(p == null)
return;
// System.out.println(p);
if (p == null) {
System.out.println("REMOVED(peer is null): " + uuid);

@ -55,7 +55,7 @@
</Button>
<VBox alignment="CENTER">
<children>
<HBox alignment="CENTER_LEFT">
<HBox alignment="CENTER">
<children>
<Label text="Download">
<padding>
@ -80,9 +80,9 @@
</VBox>
<VBox alignment="TOP_CENTER">
<children>
<HBox alignment="CENTER_LEFT">
<HBox alignment="CENTER">
<children>
<Label text="Upload ">
<Label text="Register">
<padding>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</padding>
@ -103,6 +103,28 @@
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</VBox.margin>
</VBox>
<VBox alignment="TOP_CENTER">
<children>
<HBox alignment="CENTER">
<children>
<Label text="LookUp">
<padding>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</padding>
</Label>
<TextField fx:id="lookup_filename" />
<Button fx:id="lookup_button" disable="true" mnemonicParsing="false" text="Lookup">
<HBox.margin>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</HBox.margin>
</Button>
</children>
<padding>
<Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
</padding>
</HBox>
</children>
</VBox>
<Button fx:id="sync_button" disable="true" mnemonicParsing="false" text="SYNC DHRT" textFill="#ff4700" />
</children>
</VBox>
@ -111,9 +133,9 @@
<Label text="DHRT" />
<TableView fx:id="DHRT_Table" prefHeight="200.0">
<columns>
<TableColumn fx:id="DHRT_GUID" prefWidth="75.0" text="GUID" />
<TableColumn fx:id="DHRT_NAME" prefWidth="75.0" text="NAME" />
<TableColumn fx:id="DHRT_HASH" prefWidth="75.0" text="HASH" />
<TableColumn fx:id="DHRT_GUID" prefWidth="183.0" text="GUID" />
<TableColumn fx:id="DHRT_NAME" minWidth="0.0" prefWidth="151.0" text="NAME" />
<TableColumn fx:id="DHRT_HASH" prefWidth="183.0" text="HASH" />
</columns>
</TableView>
<VBox alignment="CENTER">

@ -55,7 +55,7 @@
</Button>
<VBox alignment="CENTER">
<children>
<HBox alignment="CENTER_LEFT">
<HBox alignment="CENTER">
<children>
<Label text="Download">
<padding>
@ -80,9 +80,9 @@
</VBox>
<VBox alignment="TOP_CENTER">
<children>
<HBox alignment="CENTER_LEFT">
<HBox alignment="CENTER">
<children>
<Label text="Upload ">
<Label text="Register">
<padding>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</padding>
@ -103,6 +103,28 @@
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</VBox.margin>
</VBox>
<VBox alignment="TOP_CENTER">
<children>
<HBox alignment="CENTER">
<children>
<Label text="LookUp">
<padding>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</padding>
</Label>
<TextField fx:id="lookup_filename" />
<Button fx:id="lookup_button" disable="true" mnemonicParsing="false" text="Lookup">
<HBox.margin>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</HBox.margin>
</Button>
</children>
<padding>
<Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
</padding>
</HBox>
</children>
</VBox>
<Button fx:id="sync_button" disable="true" mnemonicParsing="false" text="SYNC DHRT" textFill="#ff4700" />
</children>
</VBox>
@ -111,9 +133,9 @@
<Label text="DHRT" />
<TableView fx:id="DHRT_Table" prefHeight="200.0">
<columns>
<TableColumn fx:id="DHRT_GUID" prefWidth="75.0" text="GUID" />
<TableColumn fx:id="DHRT_NAME" prefWidth="75.0" text="NAME" />
<TableColumn fx:id="DHRT_HASH" prefWidth="75.0" text="HASH" />
<TableColumn fx:id="DHRT_GUID" prefWidth="183.0" text="GUID" />
<TableColumn fx:id="DHRT_NAME" minWidth="0.0" prefWidth="151.0" text="NAME" />
<TableColumn fx:id="DHRT_HASH" prefWidth="183.0" text="HASH" />
</columns>
</TableView>
<VBox alignment="CENTER">

Loading…
Cancel
Save