implementata chat per cuori solitari

This commit is contained in:
2014-12-12 00:17:48 +01:00
parent 7bdbb33836
commit cff4e01e21
7 changed files with 300 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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";
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}

View File

@@ -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<ClientInterface>();
d = new ArrayList<ClientInterface>();
}
@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<ClientInterface> u;
private ArrayList<ClientInterface> d;
}

View File

@@ -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;
}