esame programmazione distribuita + readme
This commit is contained in:
24
rmi_exam/Client.java
Normal file
24
rmi_exam/Client.java
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.rmi.server.UnicastRemoteObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public class Client extends UnicastRemoteObject implements ClientInterface {
|
||||||
|
|
||||||
|
private final String nome;
|
||||||
|
|
||||||
|
public Client (String in_name) throws RemoteException {
|
||||||
|
nome = in_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void detto (String s) throws RemoteException{
|
||||||
|
System.out.println(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getname(){return nome;}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
25
rmi_exam/ClientData.java
Normal file
25
rmi_exam/ClientData.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public class ClientData {
|
||||||
|
public ClientData (String inname){
|
||||||
|
name = inname;
|
||||||
|
}
|
||||||
|
private boolean voto = false;
|
||||||
|
private boolean havotato = false;
|
||||||
|
private boolean blocked = false;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public void setVoto(boolean invoto){voto=invoto;}
|
||||||
|
public void setHavotato(boolean invotato){havotato = invotato;}
|
||||||
|
public void setBlocked (boolean value) {blocked=value;}
|
||||||
|
public String getName(){return name;}
|
||||||
|
public boolean getvoto() {return voto;};
|
||||||
|
public boolean gethavotato(){return havotato;}
|
||||||
|
public boolean getblocked(){return blocked;}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
11
rmi_exam/ClientInterface.java
Normal file
11
rmi_exam/ClientInterface.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
import java.rmi.Remote;
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public interface ClientInterface extends Remote {
|
||||||
|
void detto (String s) throws RemoteException;
|
||||||
|
}
|
||||||
80
rmi_exam/LaunchClient.java
Normal file
80
rmi_exam/LaunchClient.java
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
|
||||||
|
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 16/01/2015.
|
||||||
|
*/
|
||||||
|
public class LaunchClient {
|
||||||
|
|
||||||
|
public static void main (String[] args ){
|
||||||
|
|
||||||
|
if (args.length <2 || args.length > 2)
|
||||||
|
System.exit(-1);
|
||||||
|
System.setSecurityManager(new SecurityManager());
|
||||||
|
ClientInterface c = null;
|
||||||
|
ServerInterface s = null;
|
||||||
|
try{
|
||||||
|
c = new Client(args[0]);
|
||||||
|
s = (ServerInterface) Naming.lookup("rmi://" + args[1] + "/server");
|
||||||
|
s.iscriviti(c,( (Client)c ).getname() );
|
||||||
|
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
String comando = command(b);
|
||||||
|
|
||||||
|
while (!comando.equals("!quit")){
|
||||||
|
if (comando.startsWith("!")){
|
||||||
|
boolean vote_result;
|
||||||
|
if (comando.substring(1).equals("si"))
|
||||||
|
vote_result = s.vota(c,true);
|
||||||
|
else if (comando.substring(1).equals("no"))
|
||||||
|
vote_result = s.vota(c,false);
|
||||||
|
else vote_result = false;
|
||||||
|
|
||||||
|
if (vote_result)
|
||||||
|
System.out.println("votato");
|
||||||
|
else
|
||||||
|
System.out.println("Non puoi votare poichè non c'è una votazione in corso, hai gia votato, sei stato bloccato o il tuo input è scorretto");
|
||||||
|
} else {
|
||||||
|
boolean dici_result;
|
||||||
|
dici_result = s.dici(c,comando);
|
||||||
|
if (!dici_result)
|
||||||
|
System.out.println ("Non puoi parlare poichè non c'è il numero minimo di partecipanti o sei stato bloccato");
|
||||||
|
}
|
||||||
|
comando = command(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NotBoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
try {
|
||||||
|
s.disiscriviti(c);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.exit(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String command (BufferedReader b){
|
||||||
|
try{
|
||||||
|
return b.readLine();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return "!quit";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
83
rmi_exam/LaunchServer.java
Normal file
83
rmi_exam/LaunchServer.java
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.rmi.registry.LocateRegistry;
|
||||||
|
import java.rmi.registry.Registry;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public class LaunchServer {
|
||||||
|
|
||||||
|
public static void main (String[] args){
|
||||||
|
|
||||||
|
System.setSecurityManager(new SecurityManager());
|
||||||
|
|
||||||
|
try {
|
||||||
|
ServerInterface s = new Server();
|
||||||
|
Registry r = LocateRegistry.getRegistry();
|
||||||
|
r.rebind("server",s);
|
||||||
|
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
String comando = command(b);
|
||||||
|
while (true){ //supponiamo il server non esca
|
||||||
|
|
||||||
|
if (!comando.startsWith("!"))
|
||||||
|
System.out.println("Parametro errato");
|
||||||
|
else{
|
||||||
|
comando = comando.substring(1);
|
||||||
|
if ( comando.split(" ")[0].equals("blocco") ){
|
||||||
|
Iterator<ClientInterface> it = ((Server)s).getH().keySet().iterator();
|
||||||
|
for (;it.hasNext();){
|
||||||
|
ClientInterface t = it.next();
|
||||||
|
if ( ((Server)s).getH().get(t).getName().equals(comando.split(" ")[1] )){
|
||||||
|
((Server)s).getH().get(t).setBlocked(true);
|
||||||
|
t.detto("bloccato");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (comando.split(" ")[0].equals("sblocco")){
|
||||||
|
Iterator<ClientInterface> it = ((Server)s).getH().keySet().iterator();
|
||||||
|
for (;it.hasNext();){
|
||||||
|
ClientInterface t = it.next();
|
||||||
|
if ( ((Server)s).getH().get(t).getName().equals(comando.split(" ")[1] )){
|
||||||
|
((Server)s).getH().get(t).setBlocked(false);
|
||||||
|
t.detto("sbloccato");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (comando.split(" ")[0].equals("sondaggio")){
|
||||||
|
|
||||||
|
((Server)s).setsondaggio(true);
|
||||||
|
int start = 10;
|
||||||
|
String message_sondaggio = comando.substring(start);
|
||||||
|
Iterator<ClientInterface> it = ((Server)s).getH().keySet().iterator();
|
||||||
|
for (;it.hasNext();){
|
||||||
|
it.next().detto(message_sondaggio);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
System.out.println("Comando ! non valido");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
comando = command(b);
|
||||||
|
}
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String command (BufferedReader b){
|
||||||
|
try{
|
||||||
|
return b.readLine();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return "!quit";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
82
rmi_exam/Server.java
Normal file
82
rmi_exam/Server.java
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.rmi.server.UnicastRemoteObject;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public class Server extends UnicastRemoteObject implements ServerInterface {
|
||||||
|
|
||||||
|
private HashMap<ClientInterface,ClientData> h;
|
||||||
|
private boolean votazione_in_corso = false;
|
||||||
|
private boolean chaton=false;
|
||||||
|
|
||||||
|
public Server() throws RemoteException{
|
||||||
|
h=new HashMap<ClientInterface, ClientData>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void iscriviti (ClientInterface c, String n) throws RemoteException {
|
||||||
|
|
||||||
|
h.put(c,new ClientData(n));
|
||||||
|
if (h.size()>=2){chaton=true;}
|
||||||
|
if (chaton){
|
||||||
|
Iterator<ClientInterface> it = h.keySet().iterator();
|
||||||
|
for(;it.hasNext();){
|
||||||
|
ClientInterface t = it.next();
|
||||||
|
t.detto(h.get(c).getName() + " e' entrato in chat");//anche a se stesso
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disiscriviti( ClientInterface c) throws RemoteException {
|
||||||
|
String name = h.get(c).getName();
|
||||||
|
h.remove(c);
|
||||||
|
if (chaton){
|
||||||
|
Iterator<ClientInterface> it = h.keySet().iterator();
|
||||||
|
for (;it.hasNext();){
|
||||||
|
ClientInterface t = it.next();
|
||||||
|
t.detto(name + " e' uscito dalla chat"); // non a se stesso
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean dici (ClientInterface c, String m) throws RemoteException {
|
||||||
|
if (chaton && !h.get(c).getblocked()){
|
||||||
|
Iterator<ClientInterface> it = h.keySet().iterator();
|
||||||
|
for (;it.hasNext();){
|
||||||
|
ClientInterface t = it.next();
|
||||||
|
if(!t.equals(c)){
|
||||||
|
t.detto(h.get(c).getName() + ":" + m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean vota (ClientInterface c, boolean v) throws RemoteException{
|
||||||
|
if (chaton && votazione_in_corso && !h.get(c).getblocked() && !h.get(c).gethavotato()){
|
||||||
|
h.get(c).setHavotato(true);
|
||||||
|
h.get(c).setVoto(v);
|
||||||
|
System.out.println(h.get(c).getName() + " ha votato " + convert(v));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String convert(boolean in){
|
||||||
|
if (in)
|
||||||
|
return "si";
|
||||||
|
return "no";
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<ClientInterface,ClientData> getH(){return h;}
|
||||||
|
public void setsondaggio(boolean value) {votazione_in_corso=value;}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
16
rmi_exam/ServerInterface.java
Normal file
16
rmi_exam/ServerInterface.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package rmi_exam;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.rmi.Remote;
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 16/01/2015.
|
||||||
|
*/
|
||||||
|
public interface ServerInterface extends Remote {
|
||||||
|
boolean dici (ClientInterface c, String m) throws RemoteException;
|
||||||
|
boolean vota (ClientInterface c, boolean v) throws RemoteException;
|
||||||
|
void iscriviti (ClientInterface c, String n) throws RemoteException;
|
||||||
|
void disiscriviti (ClientInterface c) throws RemoteException;
|
||||||
|
}
|
||||||
27
rmi_exam/readme.txt
Normal file
27
rmi_exam/readme.txt
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
Struttura del compito\esame invariata. Fixato solo alcuni bug grafici ed errori di sintassi.
|
||||||
|
Ogni errore riportato qui sotto fa riferimento ad una sola linea di codice del documento consegnato all'esame.
|
||||||
|
|
||||||
|
Bug grafici:
|
||||||
|
1)sostituito 'int start = comando.indexof("sondaggio") + 2' con 'int start = 10' in LaunchServer
|
||||||
|
2)sostituito 't.detto(h.get(t).getName() + "e' entrato in chat")' con 't.detto(h.get(c).getName() + "e' entrato in chat")' nel metodo iscriviti di Server
|
||||||
|
3)aggiunto 'String name = h.get(c).getName();' al metodo disiscriviti di Server
|
||||||
|
4)sostituito 't.detto(h.get(t).getName() + "e' uscito dalla chat")' con 't.detto(name + " e' uscito dalla chat");' nel metodo disicriviti di Server
|
||||||
|
5)sostituito 't.detto(h.get(t).getName() + ":" + m)' con 't.detto(h.get(c).getName() + ":" + m)' nel metodo dici di Server
|
||||||
|
6)sostituito 'System.out.println("Non puoi votare poichè non c'è una votazione in corso,sei stato bloccato o il tuo input è scorretto")' con 'System.out.println("Non puoi votare poichè non c'è una votazione in corso, hai gia votato, sei stato bloccato o il tuo input è scorretto");' nel while di LaunchClient
|
||||||
|
7)sostituito "t!=c" con "!t.equals(c)" in Server
|
||||||
|
|
||||||
|
Errori di sintassi:
|
||||||
|
1)mancano tutti gli import
|
||||||
|
2)mancano le parentesi tonde nei getter di ClientData
|
||||||
|
3)mancano le parentesi tonde nel metodo getH di Server
|
||||||
|
4)manca void al ritorno del metodo setsondaggio in Server
|
||||||
|
5)manca ";" nell'ultima istruzione del metodo setsondaggio in Server
|
||||||
|
6)il ; va spostato all'interno della parentesi graffa nel metodo getname di Client
|
||||||
|
7)"new securitymanager()" in LaunchClient,LaunchServer va come argomento di System.setsecuritymanager e non come assegnazione
|
||||||
|
8)"command" usato al posto di "comando" in LaunchClient
|
||||||
|
9)manca println a System.out in LaunchClient
|
||||||
|
10)definito "ServerInterface s;" al di fuori del try altrimenti non visibile nello scoping di finally in LaunchClient
|
||||||
|
11)aggiunto try catch nel blocco finally in LaunchClient
|
||||||
|
12)"t.dici" invece di "t.detto" in LaunchServer
|
||||||
|
13)parentesi tonda saltata al termine di un if in LaunchServer
|
||||||
|
14)else mancante in LaunchClient,non avevo usato le parentesi
|
||||||
34
test/test.java
Normal file
34
test/test.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Giovanni on 14/01/2015.
|
||||||
|
*/
|
||||||
|
public class test {
|
||||||
|
|
||||||
|
public static void main (String[] args){
|
||||||
|
|
||||||
|
|
||||||
|
System.out.print(fai(5));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int fai (int a){
|
||||||
|
try {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
|
||||||
|
System.out.print("sada");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
finally {
|
||||||
|
//return 10;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user