if (!isConnected())
return;
final ContainerMessage.ViewChangeMessage vc = (ContainerMessage.ViewChangeMessage) mess.getData();
if (vc == null)
throw new IOException("view change message cannot be null"); //$NON-NLS-1$
final ID fromID = mess.getFromContainerID();
if (fromID == null || !fromID.equals(remoteServerID)) {
throw new IOException("view change message fromID=" + fromID + " is not from remoteServerID=" + remoteServerID); //$NON-NLS-1$ //$NON-NLS-2$
}
final ID[] changeIDs = vc.getChangeIDs();
if (changeIDs == null) {
// do nothing if we've got no changes
} else {
for (int i = 0; i < changeIDs.length; i++) {
if (vc.isAdd()) {
boolean wasAdded = false;
synchronized (getGroupMembershipLock()) {
// check to make sure this member id is not already
// known
if (groupManager.getMemberForID(changeIDs[i]) == null) {
wasAdded = true;
groupManager.addMember(new Member(changeIDs[i]));
}
}
// Notify listeners only if the add was actually
// accomplished
if (wasAdded)
fireContainerEvent(new ContainerConnectedEvent(getID(), changeIDs[i]));
} else {
if (changeIDs[i].equals(getID())) {
// We've been ejected.
final ID serverID = remoteServerID;
synchronized (getGroupMembershipLock()) {
handleLeave(remoteServerID, connection);
}
// Notify listeners that we've been ejected
fireContainerEvent(new ContainerEjectedEvent(getID(), serverID, vc.getData()));