+ /**
+ * Removes the given connection and all its channels and bots.
+ *
+ * @param connection
+ * The connection to remove
+ */
+ private void removeConnection(Connection connection) {
+ Optional<Network> network = getNetwork(connection);
+ if (!network.isPresent()) {
+ return;
+ }
+
+ /* find all channels that need to be removed. */
+ for (Collection<Channel> channels : ImmutableList.of(joinedChannels, extraChannels)) {
+ for (Iterator<Channel> channelIterator = channels.iterator(); channelIterator.hasNext(); ) {
+ Channel joinedChannel = channelIterator.next();
+ if (!joinedChannel.network().equals(network.get())) {
+ continue;
+ }
+
+ channelIterator.remove();
+ }
+ }
+
+ /* now remove all bots for that network. */
+ Map<String, Bot> bots = networkBots.row(network.get());
+ int botCount = bots.size();
+ int packCount = 0;
+ for (Bot bot : bots.values()) {
+ packCount += bot.packs().size();
+ }
+ bots.clear();
+ eventBus.post(new GenericMessage(String.format("Network %s disconnected, %d bots removed, %d packs removed.", network.get().name(), botCount, packCount)));
+
+ /* now remove the network. */
+ networkConnections.remove(network.get());
+ }
+