Dobry wieczór.
Mam problem z "kradzieżą" danych przy przesyłaniu między klientem a serwerem. Mam prostą listę z userami ONLINE po stronie klienta. Odpalam sobie serwer i 2 klientów. Pierwszemu każę się połączyć z serwerem. Serwer pokazuje że wysyła dane o 1 userze online - zgadza się. Po stronie klienta pokazuje że tylko on jest dostępny. 1 klient połączony - 1 online - OK
Teraz odpalam klienta numer 2. Łączę się z serwerem i po stronie klienta nr2 pokazuje że jest dwóch online (zgadza się) ale za to klient 1 nadal widzi tylko siebie.
Oto część programu, która odpowiada za wysyłanie i odbieranie:
Po stronie serwera - wysyłacz statusu (m. in.)
private void rewrite() {
online.clear();
for(int key : handlerMap.keySet()) {
online.put(handlerMap.get(key).getId(), handlerMap.get(key).getNickname());
}
}
public void run() {
try {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
container = new MsgContainer();
list = new OnlineList();
while(!interrupt) {
rewrite();
list.setOnlineList(online); //zapisujemy mape z 2 klientami do wyslania. mapa sklada sie z ID klienta i jego NICKU
container.setMessage(message); //dodatkowe dane do wyslania - nie istotne
container.setList(list);
System.out.println("klucz - "+id+" ----------------" +container.getList().getOnlineList().size()); //tuz przed wyslaniem sprawdzam czy na pewno //wysylani sa obaj klienci, wszystko sie zgadza, DO OBU KLIENTOW PO STRONIE SERWERA wysylana jest ta sama liczba online - 2
oos.writeObject(container); //wysylamy obiekt
message = null;
Thread.sleep(100);
}
oos.close();
}
catch(InterruptedException e) { System.out.println(e); }
catch(IOException e) { System.out.println(e); }
threadOnlineList.interrupt();
}
Po stronie klienta odbieramy:
public void run() {
try {
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while(!interrupt) {
if(ois.readObject() != null) {
MsgContainer container = (MsgContainer) ois.readObject(); //odbieramy obiekt
updateList(container.getList().getOnlineList());
System.out.println(container.getList().getOnlineList().size()); //tu juz pokazuje dla jednego klienta ze mapa zawiera
//tyko jednego klienta, natomiast u drugiego ze dwoch. Czyli po drodze jest jeden gubiony
}
Thread.sleep(100);
}
ois.close();
}
catch(IOException e) { System.out.println(e); }
catch(InterruptedException e) { System.out.println(e); }
catch(ClassNotFoundException e) { System.out.println(e); }
}
//EDIT Dodam że probowalem przesłać po prostu liczbę online (bez juz szczegolow, kto z jakim ID itd.) i przesyła dobrze. To mnie martwi bo wychodzi na to że to jakiś błąd JAVY ?