Moved functionality of getting ip and port from user from InputThread to main.
This commit is contained in:
@@ -5,14 +5,15 @@
|
||||
package vslab1.src.Input;
|
||||
|
||||
import vslab1.src.Terminatable;
|
||||
import vslab1.src.Peers.Peer;
|
||||
import vslab1.src.Peers.PeerOrganizer;
|
||||
import vslab1.src.Sending.SendingQueue;
|
||||
import vslab1.src.Sending.Data.PublishFileNameNotification;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
public class InputThread extends Thread implements Terminatable {
|
||||
|
||||
private Scanner inputScanner = null;
|
||||
|
||||
private Terminatable receiverThread;
|
||||
private Terminatable senderThread;
|
||||
private Terminatable requestExecuterThread;
|
||||
@@ -23,10 +24,9 @@ public class InputThread extends Thread implements Terminatable {
|
||||
|
||||
private boolean inputThreadRunning = true;
|
||||
|
||||
private boolean receivedValidIP = false;
|
||||
private boolean receivedValidAndFreePort = false;
|
||||
|
||||
public InputThread(Terminatable senderThread, Terminatable receiverThread, Terminatable requestExecuterThread, SendingQueue sendingQueue) {
|
||||
public InputThread(Scanner inputScanner, Terminatable senderThread, Terminatable receiverThread, Terminatable requestExecuterThread, SendingQueue sendingQueue) {
|
||||
this.inputScanner = inputScanner;
|
||||
|
||||
this.senderThread = senderThread;
|
||||
this.receiverThread = receiverThread;
|
||||
this.requestExecuterThread = requestExecuterThread;
|
||||
@@ -35,95 +35,71 @@ public class InputThread extends Thread implements Terminatable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
String localIpAddress = null;
|
||||
int localPort = -1;
|
||||
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
while (!receivedValidIP) {
|
||||
System.out.println("Enter ip:");
|
||||
|
||||
localIpAddress = scanner.nextLine();
|
||||
|
||||
receivedValidIP = NetworkController.hasNetworkInterfaceWithIP(localIpAddress);
|
||||
}
|
||||
|
||||
while (!receivedValidAndFreePort) {
|
||||
System.out.println("Enter port:");
|
||||
|
||||
String localPortAsString = scanner.nextLine();
|
||||
|
||||
localPort = Integer.valueOf(localPortAsString);
|
||||
|
||||
receivedValidAndFreePort = NetworkController.isPortFree(localPort);
|
||||
}
|
||||
|
||||
System.out.println("This peer is online and ready to take commands.\n");
|
||||
while (inputThreadRunning) {
|
||||
|
||||
System.out.println("This peer is online.\n");
|
||||
try {
|
||||
System.out.println("Enter command:");
|
||||
String userInput = inputScanner.nextLine();
|
||||
String[] inputArgs = userInput.split(":");
|
||||
|
||||
if (inputArgs.length >= 1) {
|
||||
String command = inputArgs[0];
|
||||
|
||||
System.out.println("Enter command:");
|
||||
System.out.println(command);
|
||||
|
||||
String userInput = scanner.nextLine();
|
||||
|
||||
String[] inputArgs = userInput.split(":");
|
||||
|
||||
if (inputArgs.length >= 1) {
|
||||
String command = inputArgs[0];
|
||||
|
||||
System.out.println(command);
|
||||
|
||||
switch (command) {
|
||||
case "exit": {
|
||||
// Terminates sender thread, receiver thread and this thread.
|
||||
if (senderThread != null) {
|
||||
senderThread.terminate();
|
||||
}
|
||||
if (receiverThread != null) {
|
||||
receiverThread.terminate();
|
||||
}
|
||||
if (requestExecuterThread != null) {
|
||||
requestExecuterThread.terminate();
|
||||
}
|
||||
this.terminate();
|
||||
}break;
|
||||
case "ShowNodes": {
|
||||
// TODO send onlineStateRequests to all peers in json file
|
||||
// Start timeouts for all requests
|
||||
// Update online states according to received, timeouted messages
|
||||
}break;
|
||||
case "ShowFiles": {
|
||||
// Display own files information of jsons
|
||||
}break;
|
||||
case "PublishFile": {
|
||||
if (inputArgs.length < 2) {
|
||||
System.err.println("Too few arguments.");
|
||||
} else if (inputArgs.length > 2) {
|
||||
System.err.println("Too many arguments.");
|
||||
} else {
|
||||
// get list of online peers from json
|
||||
// for each peer online send publish file name
|
||||
//sendingQueue.add(new PublishFileNameNotification(peerOrganizer.getLocalPeer(), null, command));
|
||||
}
|
||||
}break;
|
||||
case "GetFile": {
|
||||
if (inputArgs.length < 2) {
|
||||
System.err.println("Too few arguments.");
|
||||
} else if (inputArgs.length > 2) {
|
||||
System.err.println("Too many arguments.");
|
||||
} else {
|
||||
// check which peer has file
|
||||
// send get message to that peer
|
||||
// if own file, just print
|
||||
}
|
||||
}break;
|
||||
default: {
|
||||
System.out.println("Unknown command.");
|
||||
}break;
|
||||
switch (command) {
|
||||
case "exit": {
|
||||
// Terminates sender thread, receiver thread and this thread.
|
||||
if (senderThread != null) {
|
||||
senderThread.terminate();
|
||||
}
|
||||
if (receiverThread != null) {
|
||||
receiverThread.terminate();
|
||||
}
|
||||
if (requestExecuterThread != null) {
|
||||
requestExecuterThread.terminate();
|
||||
}
|
||||
this.terminate();
|
||||
}break;
|
||||
case "ShowNodes": {
|
||||
// TODO send onlineStateRequests to all peers in json file
|
||||
// Start timeouts for all requests
|
||||
// Update online states according to received, timeouted messages
|
||||
}break;
|
||||
case "ShowFiles": {
|
||||
// Display own files information of jsons
|
||||
}break;
|
||||
case "PublishFile": {
|
||||
if (inputArgs.length < 2) {
|
||||
System.err.println("Too few arguments.");
|
||||
} else if (inputArgs.length > 2) {
|
||||
System.err.println("Too many arguments.");
|
||||
} else {
|
||||
// get list of online peers from json
|
||||
// for each peer online send publish file name
|
||||
//sendingQueue.add(new PublishFileNameNotification(peerOrganizer.getLocalPeer(), null, command));
|
||||
}
|
||||
}break;
|
||||
case "GetFile": {
|
||||
if (inputArgs.length < 2) {
|
||||
System.err.println("Too few arguments.");
|
||||
} else if (inputArgs.length > 2) {
|
||||
System.err.println("Too many arguments.");
|
||||
} else {
|
||||
// check which peer has file
|
||||
// send get message to that peer
|
||||
// if own file, just print
|
||||
}
|
||||
}break;
|
||||
default: {
|
||||
System.out.println("Unknown command.");
|
||||
}break;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
scanner.close();
|
||||
}
|
||||
|
||||
public void terminate() {
|
||||
|
||||
@@ -5,8 +5,12 @@
|
||||
package vslab1.src;
|
||||
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.SocketException;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
import vslab1.src.FileReaderWriter.FileReaderWriter;
|
||||
import vslab1.src.Input.InputThread;
|
||||
import vslab1.src.Input.NetworkController;
|
||||
import vslab1.src.Receiving.ReceiverThread;
|
||||
import vslab1.src.Receiving.ReceivingQueue;
|
||||
import vslab1.src.Request.RequestExecuterThread;
|
||||
@@ -15,34 +19,68 @@ import vslab1.src.Sending.SendingQueue;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Scanner inputScanner = new Scanner(System.in);
|
||||
|
||||
FileReaderWriter.createInfoFilesIfNotExisting(Constants.PEERCONFIGFILEPATH);
|
||||
|
||||
DatagramSocket datagramSocket = getSocket(inputScanner);
|
||||
|
||||
SendingQueue sendingQueue = new SendingQueue();
|
||||
ReceivingQueue receivingQueue = new ReceivingQueue();
|
||||
|
||||
RequestExecuterThread requestExecuterThread = new RequestExecuterThread(sendingQueue, receivingQueue);
|
||||
requestExecuterThread.start();
|
||||
ReceiverThread receiverThread = new ReceiverThread(datagramSocket, receivingQueue);
|
||||
receiverThread.start();
|
||||
SenderThread senderThread = new SenderThread(datagramSocket, sendingQueue);
|
||||
senderThread.start();
|
||||
InputThread inputThread = new InputThread(inputScanner, senderThread, receiverThread, requestExecuterThread, sendingQueue);
|
||||
inputThread.start();
|
||||
|
||||
try {
|
||||
DatagramSocket datagramSocket = new DatagramSocket(5000);
|
||||
|
||||
SendingQueue sendingQueue = new SendingQueue();
|
||||
ReceivingQueue receivingQueue = new ReceivingQueue();
|
||||
|
||||
RequestExecuterThread requestExecuterThread = new RequestExecuterThread(sendingQueue, receivingQueue);
|
||||
requestExecuterThread.start();
|
||||
ReceiverThread receiverThread = new ReceiverThread(datagramSocket, receivingQueue);
|
||||
receiverThread.start();
|
||||
SenderThread senderThread = new SenderThread(datagramSocket, sendingQueue);
|
||||
senderThread.start();
|
||||
InputThread inputThread = new InputThread(senderThread, receiverThread, requestExecuterThread, sendingQueue);
|
||||
inputThread.start();
|
||||
|
||||
try {
|
||||
requestExecuterThread.join();
|
||||
receiverThread.join();
|
||||
senderThread.join();
|
||||
inputThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
datagramSocket.close();
|
||||
} catch (SocketException e) {
|
||||
// TODO Auto-generated catch block
|
||||
requestExecuterThread.join();
|
||||
receiverThread.join();
|
||||
senderThread.join();
|
||||
inputThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
datagramSocket.close();
|
||||
inputScanner.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Asks user to enter ip and port until those are valid and applicable and creates a DatagramSocket with given values.
|
||||
* @return a DatagramSocket with ip and port specified by user input.
|
||||
*/
|
||||
public static DatagramSocket getSocket(Scanner inputScanner) {
|
||||
DatagramSocket datagramSocket = null;
|
||||
boolean receivedValidIP = false;
|
||||
boolean receivedValidAndFreePort = false;
|
||||
String localIpAddress = null;
|
||||
int localPort = -1;
|
||||
// User has to enter a valid ip.
|
||||
while (!receivedValidIP) {
|
||||
System.out.println("Enter ip:");
|
||||
localIpAddress = inputScanner.nextLine();
|
||||
receivedValidIP = NetworkController.hasNetworkInterfaceWithIP(localIpAddress);
|
||||
if (!receivedValidIP) {
|
||||
System.err.println("Error: IP is not valid for this system. Please re-enter.");
|
||||
}
|
||||
}
|
||||
// User has to enter a valid port.
|
||||
while (!receivedValidAndFreePort) {
|
||||
System.out.println("Enter port:");
|
||||
String localPortAsString = inputScanner.nextLine();
|
||||
localPort = Integer.valueOf(localPortAsString);
|
||||
datagramSocket = NetworkController.tryBindToPort(localIpAddress, localPort);
|
||||
if (datagramSocket == null) {
|
||||
System.err.println("Error: Port is not available for this ip. Please re-enter.");
|
||||
} else {
|
||||
receivedValidAndFreePort = true;
|
||||
}
|
||||
}
|
||||
return datagramSocket;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user