/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.remote.plugin; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.logging.Logger; import org.geoserver.wps.remote.RemoteProcessClientListener; import org.geotools.util.logging.Logging; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; /** * Listens for "UNREGISTER" messages from XMPP service channels and takes action accordingly. * * @author Alessio Fabiani, GeoSolutions * */ public class XMPPUnRegisterMessage implements XMPPMessage { /** The LOGGER */ public static final Logger LOGGER = Logging.getLogger(XMPPMessage.class.getPackage().getName()); @Override public boolean canHandle(Map<String, String> signalArgs) { if (signalArgs != null && signalArgs.get("topic") != null) return signalArgs.get("topic").equals("unregister"); return false; } @Override public void handleSignal(XMPPClient xmppClient, Packet packet, Message message, Map<String, String> signalArgs) { try { xmppClient.handleMemberLeave(packet); } catch (Exception e) { // NOTIFY LISTENERS final Set<RemoteProcessClientListener> remoteClientListeners = xmppClient .getRemoteClientListeners(); synchronized (remoteClientListeners) { for (RemoteProcessClientListener listener : remoteClientListeners) { Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("serviceJID", packet.getFrom()); final String pID = (signalArgs != null ? signalArgs.get("id") : null); listener.exceptionOccurred(pID, e, metadata); } } } } }