package de.bwlehrpool.bwlp_guac; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.net.event.TunnelCloseEvent; import org.apache.guacamole.net.event.TunnelConnectEvent; import org.apache.guacamole.net.event.listener.Listener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; /** * A listener to track whether a user currently is connected to a tunnel. */ public class TunnelListener implements Listener { private static final Logger LOGGER = LoggerFactory.getLogger(TunnelListener.class); private static final HashMap userTunnelCount = new HashMap(); public static boolean hasTunnel(String username) { synchronized (userTunnelCount) { return userTunnelCount.get(username) != null; } } @Override public void handleEvent(Object event) throws GuacamoleException { Integer count; int total; if (event instanceof TunnelConnectEvent) { String username = Util.getUsername((TunnelConnectEvent)event); synchronized (userTunnelCount) { count = userTunnelCount.get(username); if (count == null) { count = 1; } else { count++; } userTunnelCount.put(username, count); total = userTunnelCount.size(); } LOGGER.info("User " + username + " connected to a tunnel, count: " + count + ", total: " + total); } else if (event instanceof TunnelCloseEvent) { String username = Util.getUsername((TunnelCloseEvent)event); synchronized (userTunnelCount) { count = userTunnelCount.get(username); if (count != null) { if (count > 1) { userTunnelCount.put(username, count - 1); } else { userTunnelCount.remove(username); } } else { count = 0; } total = userTunnelCount.size(); } LOGGER.info("User " + username + " closed a tunnel, count: " + count + ", total: " + total); } } }