Scusate tanto ho un altro problema!
Premetto che sto facendo dei test e se vanno già male sn messo bene
. Allora in pratica ogni descrittore ha associato un istanza della classe Swarm che contiene un Vector<PeerData> nel quale memorizzo i dati di tutti i peer connessi allo swarm.
Ogni peer a intervalli di tempo si scarica questa lista mediante la socket TCP di cui sopra e ho provato a lanciare due fake peer e mi succede la seguente cosa:
avvio il primo peer (1): tutto ok si scarica la lista, gliela faccio stampare e risulta essere connesso lui e chi ha pubblicato il descrittore
avvio il secondo peer (2): tutto ok si scarica la lista, gliela faccio stampare e risulta essere connesso lui, il peer 1 e il peer che ha pubblicato il descrittore.
Il problema sta nel fatto che, nel frattempo che il peer 2 si è collegato il peer 1 continuava a scaricare la lista e, mentre nella lista del peer 2 compare il peer 1, il peer 2 nella lista del peer 1 non compare: come se la lista inviata dal server fosse sempre la stessa non aggiornata, eppure la lista viene aggiornata ad ogni connessione/disconnessione :berto: .
Ecco i frammenti di codice
TCPTrackerService
codice:
public void run() {
while (active) {
try {
String command = inStream.readUTF();
if (command.equals("List")) {
BCServerGui.addEvent("Peer " + socket.getInetAddress() + " require peer's list\n");
System.out.println("Size = " + swarmRef.getPeersList().size());
outStream.writeObject(swarmRef.getPeersList());
outStream.flush();
}
if (command.equals("Close")) {
BCServerGui.addEvent("Peer " + socket.getInetAddress() + " go away\n");
swarmRef.removePeer(new PeerData(socket.getInetAddress(), socket.getPort()));
outStream.writeUTF("Bye");
outStream.flush();
inStream.close();
outStream.close();
socket.close();
active = false;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Tester
codice:
for (int i = 0; i < 10; i++) {
out.writeUTF("List");
out.flush();
Vector<PeerData> tmp = (Vector<PeerData>) in.readObject();
for (int j = 0; j < tmp.size(); j++)
System.out.println(j + ")" + tmp.get(j).getAddress());
Thread.sleep(4000);
}
out.writeUTF("Close");
out.flush();
System.out.println(in.readUTF());
Vi prego aiutatemi