summaryrefslogtreecommitdiffstats
path: root/src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java')
-rw-r--r--src/main/java/de/bwlehrpool/bwlp_guac/TunnelListener.java79
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);
+ }
+
+ }
+
}