commsHandler.addMessageListener(SimpleTestDirectorMessage.class, new MessageListener() {
public void messageReceived(ManagerMessage msg) {
assert(msg instanceof SimpleTestDirectorMessage);
SimpleTestDirectorMessage message = (SimpleTestDirectorMessage) msg;
System.err.println("Got message "+msg);
switch(message.getMessageType()) {
case UI_UPDATE :
actualUsersTF.setText(Integer.toString(message.getUserCount()));
desiredUserCount.getModel().setValue(new Integer(message.getDesiredUserCount()));
break;
case USER_ADDED :
synchronized(users) {
final UserJPanel p = new UserJPanel(message.getUsername(), commsHandler);
users.put(p.getUsername(), p);
System.err.println("Addded USER "+p.getUsername());
SwingUtilities.invokeLater(new Runnable() {
public void run() {
usersPanel.add(p);
usersPanel.invalidate();
usersPanel.validate();
}
});
}
break;
case USER_REMOVED :
synchronized(users) {
final UserJPanel p1 = users.remove(message.getUsername());
System.err.append("USER REMOVED "+p1+" "+message.getUsername());
if (p1!=null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
usersPanel.remove(p1);
usersPanel.invalidate();
usersPanel.validate();
usersPanel.repaint();
System.err.println("UsersPanel children "+usersPanel.getComponents().length);
}
});
}
}
break;
case CLIENT_QUIT :
synchronized(users) {
UserJPanel p2 = users.get(message.getUsername());
if (p2!=null) {
// setClientQuit is Swing thread safe
p2.setClientQuit();
} else {
System.err.println("Got Quit message for unknown user "+message.getUsername());
}
}
break;
case USER_LIST :
synchronized(users) {
String[] allUsernames = message.getAllUsernames();
UserActionType[] allUserActions = message.getAllUserActions();
final ArrayList<UserJPanel> newPanels = new ArrayList();
for(int i=0; i<allUsernames.length; i++) {
UserJPanel up = users.get(allUsernames[i]);
if (up==null) {
up = new UserJPanel(allUsernames[i], commsHandler);
newPanels.add(up);
up.setCurrentAction(allUserActions[i]);
} else {
// TODO this needs to be an invokeLater
up.setCurrentAction(allUserActions[i]);
}
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
for(UserJPanel p : newPanels) {
usersPanel.add(p);
}
usersPanel.invalidate();
usersPanel.validate();
}
});
}
break;
default :
System.err.println("Unexpected message "+message.getMessageType());
}
}
});