@Override public boolean equals(Object o) { if (!o.getClass().equals(Subscription.class)) return false; Subscription s = (Subscription)o; return getChannel().equals(s.getChannel()) && getSubscriptionId().equals(s.getSubscriptionId()); }
@Override public int hashCode() { return (31 * getChannel().hashCode()) + getSubscriptionId().hashCode(); }
private void removeExpiredSubscriptions(Map<String, Subscription> subscriptions) { List<Object> channelIds = new ArrayList<Object>(subscriptions.size()); for (Subscription sub : subscriptions.values()) channelIds.add(GAEGravity.CHANNEL_PREFIX + sub.getChannel().getId()); Map<Object, Object> channels = gaeCache.getAll(channelIds); // Remove expired channel subscriptions for (Iterator<Map.Entry<String, Subscription>> ime = subscriptions.entrySet().iterator(); ime.hasNext(); ) { Map.Entry<String, Subscription> me = ime.next(); if (!channels.containsKey(GAEGravity.CHANNEL_PREFIX + me.getValue().getChannel().getId())) ime.remove(); } }
public boolean deliver(Channel fromClient, AsyncMessage message) { if (!accept(fromClient, message)) return false; try { message.setHeader(AsyncMessage.DESTINATION_CLIENT_ID_HEADER, subscriptionId); log.debug("Channel %s deliver message to subscription %s", channel.getId(), subscriptionId); getChannel().receive(message); return true; } catch (MessageReceivingException e) { log.error(e, "Could not deliver message"); } return false; }
public Message getUnsubscribeMessage() { CommandMessage unsubscribeMessage = new CommandMessage(); unsubscribeMessage.setOperation(CommandMessage.UNSUBSCRIBE_OPERATION); unsubscribeMessage.setClientId(getChannel().getId()); unsubscribeMessage.setDestination(destination); unsubscribeMessage.setHeader(AsyncMessage.SUBTOPIC_HEADER, getSubTopicId()); unsubscribeMessage.setHeader(AsyncMessage.DESTINATION_CLIENT_ID_HEADER, getSubscriptionId()); return unsubscribeMessage; }