Przerobiłem kod, po podpowiedziach na forum i nadal mam problem z umieszczeniem poprawnych wartośći w HashMap (przez co nie mogę przeprowadzić komunikacjji pomiędzy klietami). Aktualnie poprawnie umieszczany w mapie jest nick użytkownika (ID), z każdym następnym połączonym do serwera klientem, do mapy zostaje dodany jego nick. Jednak znowu źle dodaje instancję klasy odpowiedzialną za komunikację. Proszę o pomoc, bo nie mam już żadnego pomysłu co jest nie tak. Nie wiem, w jaki sposób powinny być umieszczane dane w HashMap (jak umieści instancję tej klasy)? Pozdrawiam
//metoda z klasy ServerClientManagerClass, odpowiedzialna za przetworzenie danych i pobranie nazwy użytkownika
...
ServerReadingStreamsThreadClass ser_rea_thread;
...
public String process_message(String message){
String result = null;
if(message.startsWith("#connect")){
map.put(user_nick(message), ser_rea_thread);//putting user name and thread in map
result = "\nConnected is user: "+user_nick(message);
System.out.print("\nMapa: "+map.toString());
}else if(message.startsWith("#disconnect")){
.....
return result;
}
Natomiast to jest właśnie klasa odp.za komunikację:
class ServerReadingStreamsThreadClass implements Runnable{
private Socket new_socket;
private DataInputStream in_data;
private DataOutputStream out_data;
private JTextArea receive_field;
ServerClientManagerClass scmc = new ServerClientManagerClass();
ServerReadingStreamsThreadClass(Socket new_socket, JTextArea receive_field, ServerClientManagerClass scmc){
this.new_socket = new_socket;
this.receive_field = receive_field;
this.scmc = scmc;
}
public void run() {
String message;
String output;
try{
in_data = new DataInputStream(new_socket.getInputStream());
out_data = new DataOutputStream(new_socket.getOutputStream());
scmc.add_client_streams_2_list(out_data);
}catch (IOException e) {
e.printStackTrace();
}
while(true){
try{
while((message = in_data.readUTF())!=null){
output = scmc.process_message(message);
receive_field.append("\n"+output);
scmc.broadcast_message(output);
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
I na koniec metoda z innej klasy uruchamiająca wątek (oraz nasłuchiwanie serwera).
public static void lauch_server(int port,JTextArea receive_field){
try{
server_socket = new ServerSocket(port);
receive_field.append("Serwer jest uruchomiony...");
}catch (IOException e) {
e.printStackTrace();
}
ServerClientManagerClass client_manager_class = new ServerClientManagerClass();
while(true){
ServerReadingStreamsThreadClass serv_thr_class;
try{
serv_thr_class = new ServerReadingStreamsThreadClass(server_socket.accept(), receive_field, client_manager_class);
Thread server_thread = new Thread(serv_thr_class);
server_thread.start();
}catch (IOException e) {
e.printStackTrace();
}
}
}