This commit is contained in:
WickedJack99
2024-04-15 10:20:13 +02:00
parent f6881bacca
commit ee6ba32f87
15 changed files with 347 additions and 2 deletions

View File

@@ -0,0 +1,14 @@
/**
* @author Aaron Moser
*/
package vslab1.src.Input.Commands;
public enum ECommandType {
Exit,
ShowNodes,
ShowFiles,
PublishFile,
GetFile,
AddPeer,
Help
}

View File

@@ -0,0 +1,10 @@
/**
* @author Aaron Moser
*/
package vslab1.src.Input.Commands;
public interface ExecutableCommand {
public String toString();
public ECommandType getType();
public void execute();
}

View File

@@ -0,0 +1,24 @@
/**
* @author Aaron Moser
*/
package vslab1.src.Input.Commands;
import vslab1.src.Terminatable;
public record ExitCommand(Terminatable[] threadsToTerminate) implements ExecutableCommand {
@Override
public ECommandType getType() {
return ECommandType.Exit;
}
@Override
public void execute() {
for (Terminatable thread : threadsToTerminate) {
if (thread != null) {
thread.terminate();
}
}
}
}

View File

@@ -7,6 +7,7 @@ package vslab1.src.Input;
import vslab1.src.Terminatable;
import vslab1.src.FileReaderWriter.FileReaderWriter;
import vslab1.src.FileReaderWriter.FileReaderWriter.EUpdateFlag;
import vslab1.src.Input.Commands.ExitCommand;
import vslab1.src.Peers.EOnlineState;
import vslab1.src.Peers.Peer;
import vslab1.src.Sending.SendingQueue;
@@ -20,6 +21,8 @@ import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
@@ -64,7 +67,9 @@ public class InputThread extends Thread implements Terminatable {
String command = inputArgs[0];
switch (command) {
case "exit": {
case "Exit": {
Terminatable[] threadsArray = {senderThread, receiverThread, requestExecuterThread, timeoutThread, this};
new ExitCommand(null).execute();
// Terminates sender thread, receiver thread and this thread.
if (senderThread != null) {
senderThread.terminate();
@@ -175,13 +180,20 @@ public class InputThread extends Thread implements Terminatable {
FileReaderWriter.getThisPeer(EUpdateFlag.Update);
}
}break;
case "Help": {
if (inputArgs.length > 1) {
System.err.println("Too many arguments.");
} else {
}
}break;
default: {
System.err.println("Unknown command.");
}break;
}
}
} catch (Exception e) {
}
}
}

View File

@@ -18,6 +18,7 @@ import vslab1.src.Sending.SenderThread;
import vslab1.src.Sending.SendingQueue;
import vslab1.src.Timeout.JobList;
import vslab1.src.Timeout.TimeoutThread;
import vslab1.src.View.MainFrame;
public class Main {
public static void main(String[] args) {
@@ -25,6 +26,8 @@ public class Main {
FileReaderWriter.createInfoFilesIfNotExisting(Constants.PEERCONFIGFILEPATH);
MainFrame frame = new MainFrame();
DatagramSocket datagramSocket = NetworkController.getSocket(inputScanner);
SendingQueue sendingQueue = new SendingQueue();

View File

@@ -0,0 +1,9 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.ColorTheme;
public enum EColorTheme {
Light,
Dark,
}

View File

@@ -0,0 +1,10 @@
package vslab1.src.View.Language.Constants;
public class LanguageConstants {
public final static String[] titleStrings = {
"Peer to Peer Dateifreigabe",
"Peer to Peer Filesharing"
};
}

View File

@@ -0,0 +1,9 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.Language;
public enum ELanguage {
German,
English,
}

View File

@@ -0,0 +1,49 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import vslab1.src.View.Language.ELanguage;
import vslab1.src.View.Panels.EPanelType;
import vslab1.src.View.Panels.PanelOrganizer;
import vslab1.src.View.Panels.StartPanel.StartPanel;
public class MainFrame extends JFrame {
private Settings settings = null;
private PanelOrganizer panelOrganizer = null;
public MainFrame() {
this.settings = new Settings(ELanguage.English);
this.panelOrganizer = new PanelOrganizer(new StartPanel(settings));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Peer to Peer Filesharing");
//this.setLocation(null);
this.setMainPanelTo(EPanelType.StartPanel);
}
public void setMainPanelTo(EPanelType panelType) {
switch (panelType) {
case StartPanel: {
this.getContentPane().removeAll();
this.getContentPane().add(panelOrganizer.startPanel());
}break;
default: {
System.err.println("setMainPanelTo was called with unknown panel type.");
return;
}
}
this.setSize(new Dimension(1400, 700));
this.update(getGraphics());
this.setVisible(true);
}
}

View File

@@ -0,0 +1,8 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.Panels;
public enum EPanelType {
StartPanel,
}

View File

@@ -0,0 +1,9 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.Panels;
public interface Panel {
public void updateLanguage();
public void updateColorTheme();
}

View File

@@ -0,0 +1,28 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.Panels;
import vslab1.src.View.ColorTheme.EColorTheme;
import vslab1.src.View.Panels.StartPanel.StartPanel;
public record PanelOrganizer(StartPanel startPanel) {
public Panel getPanelInstance(EPanelType panelType) {
switch (panelType) {
case StartPanel: {
return startPanel;
}
default: {
return null;
}
}
}
public void updateLanguage() {
startPanel.updateLanguage();
}
public void updateColorTheme() {
startPanel.updateColorTheme();
}
}

View File

@@ -0,0 +1,119 @@
/**
* @author Aaron Moser
*/
package vslab1.src.View.Panels.StartPanel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import vslab1.src.View.Settings;
import vslab1.src.View.Panels.Panel;
public class StartPanel extends JPanel implements Panel {
private Settings settings = null;
private JLabel ipLabel = null;
private JLabel portLabel = null;
private JTextField ipTextField = null;
private JTextField portTextField = null;
private JButton submitButton = null;
public StartPanel(Settings settings) {
this.settings = settings;
build();
}
@Override
public void updateLanguage() {
if (ipLabel != null) {
ipLabel.setText(StartPanelLanguageConstants.ipLabelStrings[settings.getActiveLanguageOrdinal()]);
}
if (portLabel != null) {
portLabel.setText(StartPanelLanguageConstants.portLabelStrings[settings.getActiveLanguageOrdinal()]);
}
}
@Override
public void updateColorTheme() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'changeColorTheme'");
}
private void build() {
this.setLayout(new GridBagLayout());
addIPLabel(0,0);
addIPTextField(1,0);
addPortLabel(2,0);
addPortTextField(3,0);
addSubmitButton(4, 0);
}
private void addIPLabel(int row, int column) {
ipLabel = new JLabel(StartPanelLanguageConstants.ipLabelStrings[settings.getActiveLanguageOrdinal()]);
GridBagConstraints ipLabelConstraints = new GridBagConstraints();
ipLabelConstraints.gridx = column;
ipLabelConstraints.gridy = row;
ipLabelConstraints.anchor = GridBagConstraints.NORTHWEST;
this.add(ipLabel, ipLabelConstraints);
}
private void addIPTextField(int row, int column) {
ipTextField = new JTextField(20);
GridBagConstraints ipTextFieldConstraints = new GridBagConstraints();
ipTextFieldConstraints.gridx = column;
ipTextFieldConstraints.gridy = row;
ipTextFieldConstraints.anchor = GridBagConstraints.NORTHWEST;
this.add(ipTextField, ipTextFieldConstraints);
}
private void addPortLabel(int row, int column) {
portLabel = new JLabel(StartPanelLanguageConstants.portLabelStrings[settings.getActiveLanguageOrdinal()]);
GridBagConstraints portLabelConstraints = new GridBagConstraints();
portLabelConstraints.gridx = column;
portLabelConstraints.gridy = row;
portLabelConstraints.anchor = GridBagConstraints.NORTHWEST;
this.add(portLabel, portLabelConstraints);
}
private void addPortTextField(int row, int column) {
portTextField = new JTextField(20);
GridBagConstraints portTextFieldConstraints = new GridBagConstraints();
portTextFieldConstraints.gridx = column;
portTextFieldConstraints.gridy = row;
portTextFieldConstraints.anchor = GridBagConstraints.NORTHWEST;
this.add(portTextField, portTextFieldConstraints);
}
private void addSubmitButton(int row, int column) {
submitButton = new JButton(StartPanelLanguageConstants.submitButtonStrings[settings.getActiveLanguageOrdinal()]);
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
GridBagConstraints submitButtonConstraints = new GridBagConstraints();
submitButtonConstraints.gridx = column;
submitButtonConstraints.gridy = row;
submitButtonConstraints.anchor = GridBagConstraints.NORTHWEST;
this.add(submitButton, submitButtonConstraints);
}
}

View File

@@ -0,0 +1,18 @@
package vslab1.src.View.Panels.StartPanel;
public class StartPanelLanguageConstants {
public final static String[] ipLabelStrings = {
"IP Adresse eingeben:",
"Enter IP address:"
};
public final static String[] portLabelStrings = {
"Port eingeben:",
"Enter port:"
};
public final static String[] submitButtonStrings = {
"Peer starten",
"Start peer"
};
}

View File

@@ -0,0 +1,23 @@
package vslab1.src.View;
import vslab1.src.View.Language.ELanguage;
public class Settings {
private ELanguage activeLanguage = ELanguage.English;
public Settings(ELanguage initLanguage) {
activeLanguage = initLanguage;
}
public ELanguage getActiveLanguage() {
return activeLanguage;
}
public void setActiveLanguage(ELanguage language) {
this.activeLanguage = language;
}
public int getActiveLanguageOrdinal() {
return activeLanguage.ordinal();
}
}