Ciao scusa se ho dovuto far spostare la discussione
. Posto i pezzi di codice più importanti:
Lato Server (Thread):
codice:
public void run()
{
try {
//ottiene gli stream di I/O dalla socket
ois = new ObjectInputStream(socket.getInputStream());
oos = new ObjectOutputStream(socket.getOutputStream());
cont=0;
while(!socket.isClosed()){
cont++;
// legge la richiesta
richiesta = (Request)ois.readObject();
// System.out.println("SERVER: Ho ricevuto la richiesta n°"+cont+", REQUEST: "+richiesta.getRequest()); this.sleep(5);
manageRequest(richiesta,oos);
}
ois.close();
oos.close();
socket.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} // run()
private void manageRequest(final Request request,final ObjectOutputStream oos) {
switch (request.getRequest()) {
case "search":
{
System.out.println("SERVER THREAD RICEVUTO SEARCH.");
ListMatch temp=server.getMatchs();
if(temp==null)
temp=m;
try {
System.out.println("SERVER: Size---> "+temp.size());
Answer answerTemp=new Answer(LIST,temp,cont);
oos.writeObject(answerTemp);
oos.flush();
//System.out.println("HO INVIATO la risposta "+cont+" la size list è "+((ListMatch)answer.getContent()).size());
} catch (IOException e) {
System.out.println("SERVER THREAD, ERRORE SCRITTURA LISTA PARTITE, SEARCH: "+e.getMessage());
}
break;
}
}
Lato CLIENT (Thread):
codice:
public void run() {
try {
if(client.getInputStream()==null||client.getOutputStream()==null)
System.out.println("ERRORE MANAGER COMUNICATION 1");
oos = new ObjectOutputStream(client.getOutputStream());
ois = new ObjectInputStream(client.getInputStream());
} catch (IOException e1) {
System.out.println(e1.getMessage());
}
try {
if(ois==null||oos==null)
System.out.println("ERRORE MANAGER COMUNICATION 2");
System.out.println("Client ready.\n");
while (!(requestUser.getRequest().equals("close"))) {
oos.writeObject(requestUser);
oos.flush();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
// legge la richiesta
Answer temp=(Answer)ois.readObject();
ListMatch contentList=(ListMatch)temp.getContent();
System.out.println("ID:"+temp.getId()+" ANS:"+temp.getAnswer()+" CONT:"+contentList.toString());
String content=temp.getAnswer();
switch (content) {
case "list":
System.out.println("CLIENT THREAD: LA RISPOSTA DEL SERVER CON ID:"+temp.getId()+"E LA SIZE E' "+((ListMatch)temp.getContent()).size());
c.setAnswer(temp);
requestUser=c.getRequest();
break;
case "ok":
break;
default:
requestUser=new Request("close", null);
System.out.println("CLIENT THREAD: STO CHIUDENDO LA CONNESSIONE");
break;
}
}
oos.writeObject(requestUser);
oos.flush();
ois.close();
oos.close();
client.close();
} catch (IOException | ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
La classe ListMatch estende ArrayList<Match> ed implementa Serializzable
La classe Match per semplicità ora è composta solo da una String che rappresenta il nome della partita
La classe Answer (Request è simile) contiene questi parametri con relativi get e set:
codice:
public String answer;
private int id;
private Object content;