diff --git a/rmi_chat_l_hearts/Client.java b/rmi_chat_l_hearts/Client.java new file mode 100644 index 0000000..30c722a --- /dev/null +++ b/rmi_chat_l_hearts/Client.java @@ -0,0 +1,58 @@ +package rmi_chat_l_hearts; + +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; + +/** + * Created by Giovanni on 11/12/2014. + */ +public class Client extends UnicastRemoteObject implements ClientInterface { + + public Client( String iname, String isex, ServerInterface is) throws RemoteException { + name = iname; + sex = isex; + s = is; + } + + @Override + public void compagno(ClientInterface in) throws RemoteException { + compagno = in; + System.out.println("hai un nuovo partner"); + } + + @Override + public void dici(Message m) throws RemoteException { + System.out.println(m.getFrom() +": " + m.getM()); + } + + @Override + public void quit(String name) throws RemoteException { + System.out.println(name + " non e' piu il tuo partner"); + compagno = null; + setCompagno(s.iscriviti( (ClientInterface)this,sex)); + } + + public ClientInterface getCompagno() { + return compagno; + } + + public String getName() { + return name; + } + + public String getSex() { + return sex; + } + + public void setCompagno(ClientInterface compagno) { + if (compagno != null) { + this.compagno = compagno; + System.out.println("hai un nuovo partner"); + } + } + + private ClientInterface compagno = null; + private final String name; + private final String sex; + private ServerInterface s; +} diff --git a/rmi_chat_l_hearts/ClientInterface.java b/rmi_chat_l_hearts/ClientInterface.java new file mode 100644 index 0000000..255d5b5 --- /dev/null +++ b/rmi_chat_l_hearts/ClientInterface.java @@ -0,0 +1,22 @@ +package rmi_chat_l_hearts; + +import rmi_chat.*; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * Created by Giovanni on 11/12/2014. + */ +public interface ClientInterface extends Remote { + + + public static final String UOMO = "UOMO"; + public static final String DONNA = "DONNA"; + + void compagno (ClientInterface in ) throws RemoteException; + void dici (Message m) throws RemoteException; + void quit (String name) throws RemoteException; + + +} diff --git a/rmi_chat_l_hearts/LaunchClient.java b/rmi_chat_l_hearts/LaunchClient.java new file mode 100644 index 0000000..a8d09fa --- /dev/null +++ b/rmi_chat_l_hearts/LaunchClient.java @@ -0,0 +1,76 @@ +package rmi_chat_l_hearts; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.rmi.Naming; +import java.rmi.NotBoundException; +import java.rmi.RemoteException; + +/** + * Created by Giovanni on 11/12/2014. + */ +public class LaunchClient { + + private final static String name = "alfio"; //instead of vm args + private static String sex; //instead of vm args + + public static void main (String [] args) { + + try { + + if (Math.random() >= 0.5) + sex = "UOMO"; + else + sex = "DONNA"; + + System.out.println("Sono un " + sex + " e mi chiamo " +name); + ServerInterface s = (ServerInterface) Naming.lookup("rmi://localhost/server"); + ClientInterface c = new Client(name,sex,s); + ((Client)c).setCompagno(s.iscriviti(c, ((Client) c).getSex())); + + BufferedReader i = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String cmd = command(i); + if (!cmd.equals("!quit")) { + if ( ((Client)c).getCompagno() != null) + ((Client)c).getCompagno().dici(new Message( ((Client)c).getName() , cmd )); + else + System.out.println("non hai ancora un partner. Impossibile inviare messaggi"); + } else { + if ( ((Client)c).getCompagno() != null) { + ((Client) c).getCompagno().quit(((Client) c).getName()); + }else{ + s.disiscriviti(c, ((Client) c).getSex()); + } + break; + } + } + + } catch (RemoteException e) { + e.printStackTrace(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (NotBoundException e) { + e.printStackTrace(); + } + finally { + System.exit(0); + } + + + } + + + private static String command (BufferedReader i){ + try { + return i.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return "!quit"; + } + + +} diff --git a/rmi_chat_l_hearts/LaunchServer.java b/rmi_chat_l_hearts/LaunchServer.java new file mode 100644 index 0000000..825b36a --- /dev/null +++ b/rmi_chat_l_hearts/LaunchServer.java @@ -0,0 +1,28 @@ +package rmi_chat_l_hearts; + +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +/** + * Created by Giovanni on 11/12/2014. + */ +public class LaunchServer{ + + + public static void main (String[] args){ + + try { + ServerInterface s = new Server(); + Registry r = LocateRegistry.getRegistry(); + r.rebind("server",s); + + } catch (RemoteException e) { + e.printStackTrace(); + } + + + } + + +} diff --git a/rmi_chat_l_hearts/Message.java b/rmi_chat_l_hearts/Message.java new file mode 100644 index 0000000..9a41d53 --- /dev/null +++ b/rmi_chat_l_hearts/Message.java @@ -0,0 +1,26 @@ +package rmi_chat_l_hearts; + +import java.io.Serializable; + +/** + * Created by Giovanni on 10/12/2014. + */ +public class Message implements Serializable{ + + public Message(String ifrom, String im){ + from = ifrom; + m = im; + } + + public String getFrom() { + return from; + } + + public String getM() { + return m; + } + + private final String from; + private final String m; + +} diff --git a/rmi_chat_l_hearts/Server.java b/rmi_chat_l_hearts/Server.java new file mode 100644 index 0000000..f145819 --- /dev/null +++ b/rmi_chat_l_hearts/Server.java @@ -0,0 +1,73 @@ +package rmi_chat_l_hearts; + +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; + +/** + * Created by Giovanni on 11/12/2014. + */ +public class Server extends UnicastRemoteObject implements ServerInterface { + + public Server () throws RemoteException{ + u = new ArrayList(); + d = new ArrayList(); + } + + + @Override + public ClientInterface iscriviti(ClientInterface myself, String sex) throws RemoteException { + + if (sex.equals(UOMO) && d.size() > 0 && u.size() == 0) { + ClientInterface donna = d.remove(0); + donna.compagno(myself); + System.out.println("L'ultimo uomo entrato ha subito ricevuto una donna"); + return donna; + } + if (sex.equals(DONNA) && u.size() > 0 && d.size() == 0) { + ClientInterface uomo = u.remove(0); + uomo.compagno(myself); + System.out.println("L'ultima donna entrata ha subito ricevuto un uomo"); + return uomo; + } + + if ( sex.equals(UOMO)) { + u.add(myself); + System.out.println("Aggiunto un uomo"); + + }else { + d.add(myself); + System.out.println("Aggiunto una donna"); + } + + + if (u.size() > 0 && d.size() > 0){ + ClientInterface uomo = u.remove(0); + ClientInterface donna = d.remove(0); + donna.compagno(uomo); + uomo.compagno(donna); + + System.out.println("Accoppiato un uomo e una donna"); + } + return null; + } + + @Override + public void disiscriviti(ClientInterface myself, String sex) throws RemoteException { + if ( sex.equals(UOMO)) { + u.remove(myself); + System.out.println("Rimosso un uomo"); + + }else { + d.remove(myself); + System.out.println("Rimosso una donna"); + } + + } + + private ArrayList u; + + private ArrayList d; + + +} diff --git a/rmi_chat_l_hearts/ServerInterface.java b/rmi_chat_l_hearts/ServerInterface.java new file mode 100644 index 0000000..add93c4 --- /dev/null +++ b/rmi_chat_l_hearts/ServerInterface.java @@ -0,0 +1,17 @@ +package rmi_chat_l_hearts; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * Created by Giovanni on 11/12/2014. + */ +public interface ServerInterface extends Remote { + + public static final String UOMO = "UOMO"; + public static final String DONNA = "DONNA"; + + ClientInterface iscriviti (ClientInterface myself, String sex) throws RemoteException; + void disiscriviti (ClientInterface myself, String sex) throws RemoteException; + +}