2 Problem For this assignment, you will be using RMI(Remote Method Invocation) in Java to implement a simple single server architecture with support for multiple clients. The details are as follows:
• The server maintains a list of graphs each associated with a distinct identifier.
• Clients can request to add a new graph, update an existing graph and query for the total weight of the minimum weight spanning tree of a given graph.
• Clients can request to add a new graph using ‘add graph 〈graph identifier〉 n’. This command will add a new graph on the server with the identifier graph identifier and n number of nodes. The graph identifier is a string with a maximum length of 10 and it won’t already exist. n will be in the range: 1 <= n <= 100,000.
• Clients can request to add a new edge in a graph using ‘add edge 〈graph identifier〉 〈u〉 〈v〉 〈w〉’. This will add an undirected edge between the nodes u and v with weight w. u and v are the node numbers of the endpoints of the edge such that 1 <= u,v <= n and 0 <= w <= 10,000. n is the number of nodes in the specified graph. A graph with identifier graph identifier will already exist. There can be multiple edges and self-loops added to the graph.
1
• Clients can request for the total weight of the minimum weight spanning tree in a graph from the server using ‘get mst 〈graph identifier〉’. The client will print the solution the server returns. In case the graph does not have a spanning tree, -1 should be printed. A graph with identifier graph identifier will already exist.
• All values should fit in 32-bit signed integers.
• The server should be able to handle multiple clients simultaneously and should also work with clients on other machines.
• You are free to use any algorithm for MST.
• A tutorial for RMI can be found at https://www.tutorialspoint.com/java rmi/index.htm or https://www.geeksforgeeks.org/how-to-run-java-rmi-application/.
3 Submission Instructions You need to submit a single file - 〈RollNumber〉.zip containing a directory with the same name as your roll number that holds the following files:
• 2 Java source files - Client.java and Server.java. Your code will be run using:
– The files would be compiled with ‘javac *.java’.
– The server is run using with ‘java Server 〈server port〉’.
– The clients are run using ‘java Client 〈server ip〉 〈server port〉’.
• A report for the problem - README.md. The report should contain details of the architecture, algorithm implementation, results and observations.