package games.strategy.engine.chat; import java.util.HashMap; import java.util.Map; import games.strategy.engine.message.MessageContext; import games.strategy.net.IConnectionChangeListener; import games.strategy.net.INode; import games.strategy.net.IServerMessenger; import games.strategy.net.Messengers; public class StatusController implements IStatusController { private final Object mutex = new Object(); private final Map<INode, String> status = new HashMap<>(); private final Messengers messengers; public StatusController(final Messengers messengers) { this.messengers = messengers; ((IServerMessenger) this.messengers.getMessenger()).addConnectionChangeListener(new IConnectionChangeListener() { @Override public void connectionRemoved(final INode to) { StatusController.this.connectionRemoved(to); } @Override public void connectionAdded(final INode to) {} }); } protected void connectionRemoved(final INode to) { synchronized (mutex) { status.remove(to); } final IStatusChannel channel = (IStatusChannel) messengers.getChannelMessenger().getChannelBroadcastor(IStatusChannel.STATUS_CHANNEL); channel.statusChanged(to, null); } @Override public Map<INode, String> getAllStatus() { synchronized (mutex) { return new HashMap<>(status); } } @Override public void setStatus(final String newStatus) { final INode node = MessageContext.getSender(); synchronized (mutex) { status.put(node, newStatus); } final IStatusChannel channel = (IStatusChannel) messengers.getChannelMessenger().getChannelBroadcastor(IStatusChannel.STATUS_CHANNEL); channel.statusChanged(node, newStatus); } }