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) { return userTunnelCount.get(username) != null; } @Override public void handleEvent(Object event) throws GuacamoleException { if (event instanceof TunnelConnectEvent) { String username = ((TunnelConnectEvent)event).getCredentials().getUsername(); LOGGER.info("User " + username + " connected to a tunnel."); Integer count = userTunnelCount.get(username); if (count == null) count = 1; else count++; userTunnelCount.put(username, count); LOGGER.info("Tunnel count: " + count); } else if (event instanceof TunnelCloseEvent) { String username = ((TunnelCloseEvent)event).getCredentials().getUsername(); LOGGER.info("User " + username + " closed a tunnel."); Integer count = userTunnelCount.get(username); if (count != null) { if (count > 1) userTunnelCount.put(username, count - 1); else userTunnelCount.remove(username); LOGGER.info("Tunnel count: " + (count - 1)); } } } }