Skip to content
Snippets Groups Projects
Commit 15bffe22 authored by Monimala Mahato's avatar Monimala Mahato
Browse files

Final Code

parent 6308965b
Branches main
No related tags found
No related merge requests found
File added
package chat;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
public interface Chat extends Remote {
public void sendMessage(ClientInterface client, String message) throws RemoteException;
public void saveMessageTofile( MessageList message) throws RemoteException;
public void exitChat(ClientInterface client) throws RemoteException;
void registerUsers(ClientInterface client,String username) throws RemoteException;
public void broadcasteMessages(Message message) throws RemoteException;
public MessageList loadHistory() throws RemoteException;
}
\ No newline at end of file
package chat;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ClientInterface extends Remote {
public void showMessages(String message) throws RemoteException; // Correct name
}
package chat;
import java.io.Serializable;
public class Message implements Serializable{
private static final long serialVersionUID = 1234567L;
String username;
String message;
public Message(String username, String message){
this.username=username;
this.message=message;
}
public String getUsername(String username){
return username;
}
public String getMessage(String message){
return message;
}
public String toString(){
return username + ": " + message;
}
}
package chat;
import java.io.Serializable;
import java.util.*;
public class MessageList implements Serializable{
private static final long serialVersionUID = 1234569L;
private List<Message> msgList=new ArrayList<>();
public List<Message> getMsgList() {
return msgList;
}
public void setMsgList(List<Message> msgList) {
this.msgList = msgList;
}
}
File added
package client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
import chat.Chat;
public class Client {
public static void main(String [] args) {
try {
/*if (args.length < 2) {
System.out.println("Usage: java HelloClient <rmiregistry host> <rmiregistry port>");
return;}*/
//String host = args[0];
//int port = Integer.parseInt(args[1]);
String host = "localhost";
int port = 2099;
Registry registry = LocateRegistry.getRegistry(host, port);
Chat chat = (Chat) registry.lookup("ChatService");
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your username: ");
String username = scanner.nextLine();
ClientSide client = new ClientSide();
// Remote method invocation
chat.registerUsers(client, username);
System.out.println("Welcome to the chat, " + username + "! Type your messages below:");
while (true) {
String message = scanner.nextLine();
// Exit command
if (message.equalsIgnoreCase("/exit")) {
chat.exitChat(client); // Notify the server about exiting
System.out.println("You have left the chat.");
break;
}
// Send message to the server
chat.sendMessage(client, message);
}
} catch (Exception e) {
// System.err.println("Error on client: " + e);
e.printStackTrace();
}
}
}
package client;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import chat.ClientInterface;
import chat.Message;
public class ClientSide extends UnicastRemoteObject implements ClientInterface {
protected ClientSide() throws RemoteException {
super();
}
@Override
public void showMessages(String message) {
System.out.println(message);
}
}
File added
package server;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.rmi.RemoteException;
import java.util.*;
import java.util.Map.Entry;
import chat.Chat;
import chat.ClientInterface;
import chat.Message;
import chat.MessageList;
public class ChatApp implements Chat{
Map<ClientInterface, String> activeUsers = new HashMap<>();
private List <Message> messages=new ArrayList<>();
@Override
public void registerUsers(ClientInterface client, String username) throws RemoteException {
MessageList history=loadHistory();
if (activeUsers.containsValue(username)) {
throw new RemoteException("Username already taken! Please choose another one.");
} else {
activeUsers.put(client,username);
if(history!=null){
for(Message msg: history.getMsgList()){
try{
client.showMessages(msg.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}
System.out.println(username + " has joined the chat.");
}
}
@Override
public void sendMessage(ClientInterface client, String message) throws RemoteException {
String username = activeUsers.get(client);
if(username==null) {
System.out.println("Please register first");
}
Message msg= new Message(username, message);
messages.add(msg);
saveMessage(msg);
broadcasteMessages(msg);
}
private void saveMessage(Message msg) throws RemoteException{
MessageList messageList= loadHistory();
if(messageList==null){
System.out.println("No previous history found \n");
MessageList messageListNew= new MessageList();
messageListNew.getMsgList().add(msg);
saveMessageTofile(messageListNew);
}else{
messageList.getMsgList().add(msg);
saveMessageTofile(messageList);
}
}
@Override
public void exitChat(ClientInterface client) throws RemoteException {
activeUsers.remove(client);
}
@Override
public void broadcasteMessages(Message message) throws RemoteException {
for (Entry<ClientInterface, String> entry : activeUsers.entrySet()) {
try {
ClientInterface client = entry.getKey();
client.showMessages(message.toString());
}catch (RemoteException e) {
System.out.println("Error sending message to " + entry.getKey() + ": " + e.getMessage());
}
}
}
@Override
public void saveMessageTofile( MessageList message) throws RemoteException {
try (FileOutputStream file= new FileOutputStream("chat_history.ser");
ObjectOutputStream out= new ObjectOutputStream(file)){
out.writeObject(message);
// Append message to the file
} catch (IOException e) {
System.out.println("Error saving message: " + e.getMessage());
}
}
@Override
public MessageList loadHistory() throws RemoteException {
MessageList msg=null;
try (FileInputStream file = new FileInputStream("chat_history.ser");
ObjectInputStream input = new ObjectInputStream(file)) {
try {
msg= (MessageList) input.readObject();
if(msg!=null){
for(Message message : msg.getMsgList()){
}
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
}
return msg;
}
}
package server;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import chat.Chat;
public class Server {
public static void main(String [] args) {
try {
ChatApp ca = new ChatApp();
Chat h_stub = (Chat) UnicastRemoteObject.exportObject(ca, 0);
Registry registry;
if (args.length > 0) {
int port = Integer.parseInt(args[1]);
registry = LocateRegistry.createRegistry(port); // Create registry if not already running
System.out.println("RMI Registry started on port " + port);
} else {
registry = LocateRegistry.createRegistry(2099); // Default port
System.out.println("RMI Registry started on port 2099");
}
registry.rebind("ChatService", h_stub);
System.out.println("Server ready");
} catch (Exception e) {
System.err.println("Error on server :" + e) ;
e.printStackTrace();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment