Salve, ho in progetto una chat client/server che utilizza una libreria protocollo scritta a parte in un altro package.
Quando avvio sia il server che il client, appare un'interfaccia. Ecco, quando clicco sul bottone connetti e inserisco il nickname invece che aggiungere il nick alla lista, mi rimanda il metodo unknown del client. Non capisco dove sia il problema.
Chat Client ->
[color=#00BFBF]public View(Sender out) {
msgOut = new JTextField(80);
send = new JButton("" + '\u2936');
JPanel panel = new JPanel();
panel.add(msgOut);
panel.add(send);
add(panel, BorderLayout.SOUTH);
JPanel north = new JPanel();
connect = new JButton("Connetti");
connect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
name = JOptionPane.showInputDialog("Inserire il nick").trim();
if (name != null && !name.equals("")) {
join();
}
}
});
north.add(connect);
add(north, BorderLayout.NORTH);
msgListModel = new DefaultListModel<>();
usersListModel = new DefaultListModel<>();
this.out = out;
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
quit();
}
});
msgList = new JList(msgListModel);
usersList = new JList(usersListModel);
add(new JScrollPane(msgList));
add(new JScrollPane(usersList), BorderLayout.EAST);
send.setEnabled(false);
msgOut.setEnabled(false);
send.addActionListener(new ActionListener() {
@Override
public void join() {
out.send(Commands.Join + Protocol.commandSeparator + name);
}
@Override
public void unknown() {
JOptionPane.showMessageDialog(this, "Il server non ha riconosciuto l'ultimo comando inviato");
}
@Override
public void nickJoined(String nick) {
msgListModel.addElement(nick + " è entrato");
if (!nick.equals(name)) {
usersListModel.addElement(nick);
}else{
setTitle(name);
newNick.setEnabled(true);
privateMsg.setEnabled(true);
send.setEnabled(true);
}
msgList.requestFocus();
}[/color]
Chat Server ->
[color=#00BF00]public Server(List<Sender> senders, List<String> nicks, Sender out) {
this.senders = senders;
this.nicks = nicks;
this.out = out;
}
@Override
public void join() {
throw new RuntimeException("Metodo client usato da server");
}
@Override
public void join(String parameter) {
if(!nicks.contains(parameter)){
senders.add(out);
nicks.add(parameter);
nickJoined(parameter);
} else {
out.send(Commands.Error+Protocol.commandSeparator+Errors.DuplicateNick);
}
}
@Override
public void unknown() {
out.send("Il server non ha riconosciuto l'ultimo comando inviato");
}
@Override
public void usersList(String[] users) {
for (int i = 0; i < users.length; i++) {
out.send(users[i]);
}
}
@Override
public void nickJoined(String nick) {
out.send(nick + " è entrato");
}
}[/color]