diff options
Diffstat (limited to 'src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java')
-rw-r--r-- | src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java | 79 |
1 files changed, 44 insertions, 35 deletions
diff --git a/src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java b/src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java index 265bfc7..ed3aaa3 100644 --- a/src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java +++ b/src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java @@ -14,39 +14,48 @@ import java.util.HashMap; */ public class TunnelListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(TunnelListener.class); - - private static final HashMap<String, Integer> userTunnelCount = new HashMap<String, Integer>(); - - 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)); - } - } - - } - + private static final Logger LOGGER = LoggerFactory.getLogger(TunnelListener.class); + + private static final HashMap<String, Integer> userTunnelCount = new HashMap<String, Integer>(); + + public static boolean hasTunnel(String username) { + synchronized (userTunnelCount) { + return userTunnelCount.get(username) != null; + } + } + + @Override + public void handleEvent(Object event) throws GuacamoleException { + Integer count; + 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); + } + LOGGER.info("User " + username + " connected to a tunnel, count: " + count); + } 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; + } + } + LOGGER.info("User " + username + " closed a tunnel, count: " + count); + } + + } + } |