[CT414]: Add Assignment 1 progress

This commit is contained in:
2025-01-24 00:37:30 +00:00
parent 887c2c3d7d
commit 2d340bda25
6 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package client;
import interfaces.ApplicationForm;
import interfaces.ApplicationHandler;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
public class ApplicationClient {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
// connect to registry
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
System.out.println("Connected to RMI Registry");
// look up application handler in registry
ApplicationHandler handler = (ApplicationHandler) registry.lookup("ApplicationHandler");
System.out.println("ApplicationHandler found in registry");
// login
System.out.println("Enter your username\n> ");
String username = scanner.nextLine();
System.out.println("Enter your password\n> ");
String password = scanner.nextLine();
long sessionID = handler.login(username, password);
System.out.println("Successfully logged in with session ID: " + sessionID);
// download application form
ApplicationForm form = handler.downloadApplicationForm(sessionID);
System.out.println("Successfully downloaded application form");
// print form info
System.out.println("------ FORM INFORMATION ------");
System.out.println(form.getFormInfo());
System.out.println("Number of questions to be answered: " + form.getTotalQuestions());
System.out.println("------------------------------");
// answer questiosn
for (int i = 0; i < form.getTotalQuestions(); i++) {
System.out.println("Q" + i + ": " + form.getQuestion(i));
System.out.println("A> ");
form.answerQuestion(i, scanner.nextLine());
}
System.out.println("Form filled successfully.");
// submit form
handler.submitApplicationForm(sessionID, form);
System.out.println("Successfully submitted application form.");
} catch (Exception e) {
e.printStackTrace();
} finally {
scanner.close();
}
}
}

View File

@ -43,6 +43,11 @@ public class ApplicationFormV1 implements ApplicationForm {
answers[questionNumber] = answer;
}
@Override
public String getName() throws RemoteException {
return answers[0];
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();

View File

@ -0,0 +1,55 @@
package implementations;
import exceptions.InvalidCredentialsException;
import exceptions.InvalidSessionIDException;
import interfaces.*;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.io.*;
public class ApplicationHandlerImpl implements ApplicationHandler {
private ArrayList<Long> sessions = new ArrayList<Long>();
@Override
public long login(String username, String password) throws RemoteException, InvalidCredentialsException {
// hardcoded username and password (great practice for security)
if (username.equals("admin") && password.equals("admin")) {
long sessionId = System.currentTimeMillis(); // use current time as session id
sessions.add(sessionId);
System.out.println("User " + username + " logged in with session ID: " + sessionId);
return sessionId;
} else {
throw new InvalidCredentialsException("Invalid username or password.");
}
}
@Override
public ApplicationForm downloadApplicationForm(long sessionID) throws RemoteException, InvalidSessionIDException {
if (sessions.contains(sessionID)) {
System.out.println("Returning application form for session ID: " + sessionID);
return new ApplicationFormV1();
} else {
throw new InvalidSessionIDException("Invalid session ID.");
}
}
@Override
public void submitApplicationForm(long sessionID, ApplicationForm applicationForm) throws RemoteException, InvalidSessionIDException {
if (sessions.contains(sessionID)) {
String filename = applicationForm.getName().replace("\\s", "_") + ".txt";
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
System.out.println("Saving application form to file: " + filename);
writer.write(applicationForm.toString());
System.out.println("Successfully saved application form to file: " + filename);
} catch (IOException e) {
System.out.println("Failed to save application form to file:" + filename);
e.printStackTrace();
}
} else {
throw new InvalidSessionIDException("Invalid session ID.");
}
}
}

View File

@ -15,4 +15,7 @@ public interface ApplicationForm extends Remote {
// method to provide a String answer to a question based off its questionNumber
void answerQuestion(int questionNumber, String answer) throws RemoteException, IllegalArgumentException;
// method to return the applicant's name, for use in naming application files
String getName() throws RemoteException;
}

View File

@ -0,0 +1,14 @@
#!/bin/sh
src_path="/home/andrew/edu/year4/semester2/CT414/assignments/assignment1/code/src"
# compile code
javac -d . server/*.java client/*.java interfaces/*.java implementations/*.java 
# start rmi registry
rmiregistry -J-Djava.rmi.server.codebase=file:$src_path &
trap "kill $! 2>/dev/null" EXIT
# start server
java -cp $src_path -Djava.rmi.server.codebase=file:$src_path/ server.ApplicationServer &
trap "kill $! 2>/dev/null" EXIT

View File

@ -0,0 +1,31 @@
package server;
import implementations.ApplicationHandlerImpl;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class ApplicationServer {
public static void main(String[] args) {
try {
// start RMI registry
Registry registry = LocateRegistry.getRegistry();
// create applicationhandlerstub and bind it
ApplicationHandlerImpl applicationHandler = new ApplicationHandlerImpl();
System.out.println("Instance of ApplicationHandlerImpl created");
ApplicationHandlerImpl stub = (ApplicationHandlerImpl) UnicastRemoteObject.exportObject(applicationHandler, 0);
Naming.rebind("ApplicationHandler", stub);
System.out.println("Name rebind completed");
System.out.println("Application Server up and running");
}
catch (Exception e) {
System.out.println("Failed to start server");
e.printStackTrace();
}
}
}