protected void deliverFromAgent(Message message) { // Deliver to admin or simulation (when simulation exists) String receiver = message.getReceiver(); SimulationAgent proxy; if (isClosed) { // closed channel } else if (Admin.ADMIN.equals(receiver)) { Transportable content = message.getContent(); if (message.getSender() == null) { message.setSender(name); } if ((content instanceof AdminContent) && (((AdminContent) content).getType() == AdminContent.QUIT)) { // Time to close this connection deliverToAgent(message.createReply(new AdminContent(AdminContent.QUIT))); close(); } else { admin.deliverMessageFromAgent(this, message); } } else if ((proxy = this.proxy) != null) { proxy.deliverFromAgent(message); } else { // not a valid receiver because the agent is not in a game } }
public final void close() { if (!isClosed) { isClosed = true; admin.logoutAgentChannel(this); SimulationAgent proxy = this.proxy; if (proxy != null) { this.proxy = null; proxy.removeAgentChannel(this); } } closeChannel(); }