Beispiel #1
0
  @Override
  public SubscriptionResponse setsubscription(
      final long subscriptionid, final String[] subscriptions, final String[] exclusions) {
    final Subscriber subscriber = this.subscribers.get(subscriptionid);
    if (subscriber == null) {
      return new SubscriptionResponse();
    } else {
      synchronized (subscriber.getModifyLock()) {
        final ArrayList<String> newExclusions = new ArrayList<String>();
        if (exclusions != null) {
          newExclusions.addAll(Arrays.asList(exclusions));
        }
        subscriber.setExclusions(newExclusions.toArray(new String[] {}));

        final ArrayList<String> newSubscriptions = new ArrayList<String>();
        if (subscriptions != null) {
          newSubscriptions.addAll(Arrays.asList(subscriptions));
        }
        subscriber.setSubscriptions(newSubscriptions.toArray(new String[] {}));
      }
      final SubscriptionResponse ret = new SubscriptionResponse(subscriber);
      ret.setSubscribed(true);
      return ret;
    }
  }
Beispiel #2
0
 @Override
 public void listen(
     final RemoteAPIRequest request, final RemoteAPIResponse response, final long subscriptionid)
     throws APIFileNotFoundException, InternalApiException {
   final Subscriber subscriber = this.subscribers.get(subscriptionid);
   if (subscriber == null) {
     throw new APIFileNotFoundException();
   }
   final ArrayList<EventObject> events = new ArrayList<EventObject>();
   final ArrayList<EventObjectStorable> eventStorables = new ArrayList<EventObjectStorable>();
   try {
     EventObject event;
     while ((event = subscriber.poll(events.size() == 0 ? subscriber.getPollTimeout() : 0)) != null
         && this.subscribers.get(subscriptionid) == subscriber) {
       events.add(event);
       eventStorables.add(new EventObjectStorable(event));
     }
   } catch (final InterruptedException e) {
   }
   try {
     response.getRemoteAPI().writeStringResponse(eventStorables, null, request, response);
   } catch (final Throwable e) {
     subscriber.pushBack(events);
     throw new InternalApiException(e);
   }
 }
  public void testTcpURIs() throws Exception {

    Subscriber listener = new Subscriber("tcp://localhost:123456");
    assertTrue(listener.isTcp());
    assertEquals("localhost", listener.getHost());
    assertEquals(123456, listener.getPort());
  }
  public void testNotify_Http() throws Exception {

    // create socket listener
    SocketListener socketListener = new SocketListener(NOTIFICATION_PORT);

    // create notification listener
    Subscriber notificationListener = new Subscriber("http://localhost:" + NOTIFICATION_PORT);

    // create reports
    ECReports reports = ECElementsUtils.createECReports();

    // notify listener about reports
    notificationListener.notify(reports);

    // get input stream
    InputStream inputStream = socketListener.getInputStream();

    // read from input stream
    readHtmlHeaderFromInputStream(inputStream);
    ECReports resultReports = DeserializerUtil.deserializeECReports(inputStream);

    // close socket listener
    socketListener.stop();

    // check result
    // FIXME
    // ECElementsUtils.assertEquals(reports, resultReports);

  }
 public synchronized void unbind(EndOid oid, Ticket ticket) {
   List<Subscriber> subscribers = routes.get(oid);
   if (subscribers == null) {
     System.err.println("NULL Subscribers for: " + oid.toString());
     return;
   }
   for (Subscriber sub : subscribers) {
     if (sub.ticket.equals(ticket)) {
       if (sub.continuation != null) {
         sub.continuation.resume();
         sub.continuation = null;
       }
       subscribers.remove(sub);
       break;
     }
   }
   routes.put(oid, subscribers);
   if (subscribers.size() == 0) {
     Endpoint ep = registry.get(oid);
     if (ep == null) {
       System.err.println("Cannot find endpont: " + oid.toString());
       return;
     }
     ep.idle = true;
     ep.idleTime = System.currentTimeMillis();
   }
 }
    @Override
    public void run() {
      waitForReady();
      try {
        Thread.sleep(new Random().nextInt(200) + 100);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }

      Connection connection = ConnectionFactory.createConnection(brokerIP);
      session = connection.createSession();

      String topicHierarchy = topicHierarchies[id];
      Subscriber subscriber = session.createHierarchicalTopicSubscriber(topicHierarchy);
      System.out.println("create subscriber: " + topicHierarchy);

      messageReceiver = new TestMessageReceiver();
      subscriber.registerMessageReceiver(messageReceiver);

      while (!messageReceiver.shutdown) {
        try {
          Thread.sleep(5000);
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
        }
      }
      done();
    }
  @Override
  public <ET extends Event> void push(ET event) {
    List<Subscriber<ET>> subscribers;

    synchronized (registeredSubscribers) {
      if (!registeredSubscribers.containsKey(event.getClass())) return;

      // Inspection disabled because all inserts in to registeredSubscribers are type insured
      // due to type erasure, we can not have per-pair types.
      // noinspection unchecked
      subscribers =
          (List<Subscriber<ET>>) new ArrayList(registeredSubscribers.get(event.getClass()));
    }

    for (Subscriber<ET> subscriber : subscribers) {
      boolean txDeterminate = true;
      for (ListenerFilter filter : subscriber.getFilters()) {
        // This can only occur if someone f***s something up in an annotation, as listeners should
        // be typesafe when passed to subscribers
        // noinspection unchecked
        txDeterminate = txDeterminate && filter.shouldSend(event);
      }

      if (txDeterminate) subscriber.eventReceived(event);
    }
  }
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();

    ObjectifyService.register(Subscriber.class);
    Subscriber newSubscriber = new Subscriber(user.getEmail());
    ofy().save().entity(newSubscriber).now();

    // MailUpdate.subscribers.add(user);

    System.out.println(user.getEmail() + " has subscribed");
    List<Subscriber> subscribers = ObjectifyService.ofy().load().type(Subscriber.class).list();
    // for (Subscriber subscriber : subscribers){
    // ofy().delete().entity(subscriber);
    // }
    Collections.sort(subscribers);
    System.out.println("size" + subscribers.size());
    for (Subscriber subscriber : subscribers) {
      System.out.println(subscriber.getEmail());
    }
    // try{
    // RequestDispatcher view = req.getRequestDispatcher("");
    // view.forward(req, resp);

    // } catch (Exception e){}
    resp.sendRedirect("/");
  }
  public static void main(String[] args) {

    Subscriber subscriber = new Subscriber();
    subscriber.subscribe("FastMovingStockQuotes");
    Publisher publisher = new Publisher();
    publisher.publishMessages("AllStockQuotes");
    subscriber.unsubscribe();
  }
    @Override
    public void onSubscribe(Subscription s) {
      if (SubscriptionHelper.validateSubscription(this.s, s)) {
        return;
      }
      this.s = s;

      Subscriber<? super U> actual = this.actual;

      U b;

      try {
        b = bufferSupplier.get();
      } catch (Throwable e) {
        cancelled = true;
        s.cancel();
        EmptySubscription.error(e, actual);
        return;
      }

      if (b == null) {
        cancelled = true;
        s.cancel();
        EmptySubscription.error(new NullPointerException("The buffer supplied is null"), actual);
        return;
      }
      buffer = b;

      Publisher<B> boundary;

      try {
        boundary = boundarySupplier.get();
      } catch (Throwable ex) {
        cancelled = true;
        s.cancel();
        EmptySubscription.error(ex, actual);
        return;
      }

      if (boundary == null) {
        cancelled = true;
        s.cancel();
        EmptySubscription.error(
            new NullPointerException("The boundary publisher supplied is null"), actual);
        return;
      }

      BufferBoundarySubscriber<T, U, B> bs = new BufferBoundarySubscriber<T, U, B>(this);
      other = bs;

      actual.onSubscribe(this);

      if (!cancelled) {
        s.request(Long.MAX_VALUE);

        boundary.subscribe(bs);
      }
    }
Beispiel #11
0
 @Override
 public SubscriptionResponse subscribe(final String[] subscriptions, final String[] exclusions) {
   final Subscriber subscriber = new Subscriber(subscriptions, exclusions);
   this.subscribers.put(subscriber.getSubscriptionID(), subscriber);
   this.subscribersCleanupThread();
   final SubscriptionResponse ret = new SubscriptionResponse(subscriber);
   ret.setSubscribed(true);
   return ret;
 }
 @Override
 public void unregisterSubscriber(@NotNull Subscriber subscriber) {
   final Subscriber delegate = subscriptionDelegate.get(subscriber);
   final Subscriber s = delegate != null ? delegate : subscriber;
   boolean subscription = subscribers.remove(s);
   boolean keySubscription = keySubscribers.remove(s);
   if (subscription) removeFromStats("subscription");
   if (keySubscription) removeFromStats("keySubscription");
   s.onEndOfSubscription();
 }
Beispiel #13
0
 /*
  * (non-Javadoc)
  *
  * @see
  * org.appwork.remoteapi.events.EventsAPIInterface#getsubscriptionstatus
  * (long)
  */
 @Override
 public SubscriptionStatusResponse getsubscriptionstatus(final long subscriptionid) {
   final Subscriber subscriber = this.subscribers.get(subscriptionid);
   if (subscriber == null) {
     return new SubscriptionStatusResponse();
   } else {
     subscriber.keepAlive();
     final SubscriptionStatusResponse ret = new SubscriptionStatusResponse(subscriber);
     ret.setSubscribed(true);
     return ret;
   }
 }
 /** Tick action */
 public void tick() {
   if (this.subscribers.size() > 0) {
     for (Subscriber sub : this.subscribers) {
       // Check subscription date
       Date now = new Date();
       if (sub.getDate().after(now)) {
         this.notify(sub);
       } else {
         this.subscribers.remove(sub);
         break;
       }
     }
   }
 }
 /** Delete subscriber */
 public boolean deregister(Subscription sub) throws FailureException {
   for (Subscriber subs : subscribers) {
     if (subs.getSub().equals(sub)) {
       subscribers.remove(new Subscriber(subs.getSub(), subs.getType(), subs.getDate()));
     }
   }
   //
   System.out.println(
       "Agent "
           + buildingcs.getAID().getName()
           + " deregistered the agent "
           + sub.getMessage().getSender().getName());
   return false;
 }
Beispiel #16
0
  @Override
  public SubscribeHandle start(List<Subscriber> subscribers) {
    CompositeSubscribeHandle handle = new CompositeSubscribeHandle();

    for (Subscriber s : subscribers) {
      List<Topic> topics = m_metaService.listTopicsByPattern(s.getTopicPattern());

      if (topics == null || topics.isEmpty()) {
        throw new IllegalArgumentException(
            String.format("Can not find any topics matching pattern %s", s.getTopicPattern()));
      }

      log.info(
          "Found topics({}) matching pattern({}), groupId={}.",
          CollectionUtil.collect(
              topics,
              new Transformer() {

                @Override
                public Object transform(Object topic) {
                  return ((Topic) topic).getName();
                }
              }),
          s.getTopicPattern(),
          s.getGroupId());

      for (Topic topic : topics) {
        ConsumerContext context =
            new ConsumerContext(
                topic, s.getGroupId(), s.getConsumer(), s.getMessageClass(), s.getConsumerType());

        // FIXME validate all, if fail in any validator, exit
        if (validate(topic, context)) {
          try {
            String endpointType = m_metaService.findEndpointTypeByTopic(topic.getName());
            ConsumerBootstrap consumerBootstrap =
                m_consumerManager.findConsumerBootStrap(endpointType);
            handle.addSubscribeHandle(consumerBootstrap.start(context));

          } catch (RuntimeException e) {
            log.error(
                "Failed to start consumer for topic {}(consumer: groupId={}, sessionId={})",
                topic.getName(),
                context.getGroupId(),
                context.getSessionId(),
                e);
            throw e;
          }
        }
      }
    }

    return handle;
  }
Beispiel #17
0
 @Override
 public SubscriptionResponse changesubscriptiontimeouts(
     final long subscriptionid, final long polltimeout, final long maxkeepalive) {
   final Subscriber subscriber = this.subscribers.get(subscriptionid);
   if (subscriber == null) {
     return new SubscriptionResponse();
   } else {
     subscriber.setMaxKeepalive(maxkeepalive);
     subscriber.setPollTimeout(polltimeout);
     subscriber.notifyListener();
     final SubscriptionResponse ret = new SubscriptionResponse(subscriber);
     ret.setSubscribed(true);
     return ret;
   }
 }
Beispiel #18
0
  /**
   * Subscribes a given Subscriber with the given subscription type
   *
   * @param subscriber The given Subscriber object
   * @param type Type of subscription
   * @return Returns true if the subscription was successfully applied for the given type
   */
  public boolean subscribe(Subscriber subscriber, String type) {

    boolean flag = false;

    if (subscriber != null && type != null) {

      for (Publisher pub : publishers) {

        if (pub.getPublisher().getType().contains(type)) {
          flag = true;
          break;
        }
      }
      if (!flag) return false;

      NewSubscriber newSubscriber = subscriber.getSubscriber();
      ArrayList<String> temp = subscriberMap.get(newSubscriber);

      if (temp != null) {
        if (temp.contains(type)) return false;

        subscriberMap.get(newSubscriber).add(type);
        return true;
      } else {
        ArrayList<String> tempType = new ArrayList<String>();
        tempType.add(type);
        subscriberMap.put(newSubscriber, tempType);
        return true;
      }
    }
    return false;
  }
Beispiel #19
0
 @Override
 public SubscriptionResponse unsubscribe(final long subscriptionid) {
   final Subscriber subscriber = this.subscribers.remove(subscriptionid);
   if (subscriber != null) {
     subscriber.notifyListener();
     try {
       for (final EventPublisher publisher : this.publishers) {
         publisher.terminatedSubscription(this, subscriptionid);
       }
     } catch (final Throwable e) {
       e.printStackTrace();
     }
     return new SubscriptionResponse(subscriber);
   }
   return new SubscriptionResponse();
 }
    @Override
    public void subscribe(final Subscriber<? super String> observer) {
      observer.onSubscribe(EmptySubscription.INSTANCE);
      t =
          new Thread(
              new Runnable() {

                @Override
                public void run() {
                  for (String s : valuesToReturn) {
                    if (s == null) {
                      System.out.println("throwing exception");
                      try {
                        Thread.sleep(100);
                      } catch (Throwable e) {

                      }
                      observer.onError(new NullPointerException());
                      return;
                    } else {
                      observer.onNext(s);
                    }
                  }
                  System.out.println("subscription complete");
                  observer.onComplete();
                }
              });
      t.start();
    }
Beispiel #21
0
 @Override
 public void onSubscribe(Subscription s) {
   if (SubscriptionHelper.validateSubscription(this.s, s)) {
     return;
   }
   this.s = s;
   actual.onSubscribe(s);
 }
 public void route(Ticket ticket, EndOid toOid, Packet packet) {
   List<Subscriber> subscribers = routes.get(toOid);
   if (subscribers != null) {
     for (Subscriber subscriber : subscribers) {
       synchronized (subscriber) {
         subscriber.queue.add(packet);
         if (subscriber.continuation != null) {
           if (subscriber.continuation.isSuspended()) {
             subscriber.continuation.resume();
           }
           subscriber.continuation = null;
           subscriber.lastActive = System.currentTimeMillis();
         }
       }
     }
   }
 }
Beispiel #23
0
    @Override
    public void request(long n) {
      if (SubscriptionHelper.validateRequest(n)) {
        return;
      }
      if (compareAndSet(false, true)) {
        int i = 0;
        final Subscriber<? super Integer> a = s;
        final AtomicInteger c = counter;

        while (!cancelled) {
          a.onNext(i++);
          c.incrementAndGet();
        }
        System.out.println("unsubscribed after: " + i);
      }
    }
    @Override
    public void onComplete() {
      if (done) {
        return;
      }
      done = true;

      actual.onComplete();
    }
Beispiel #25
0
  @Test
  public void testBPubSub() throws InterruptedException {
    String topic = "test";

    // Start pubsub server
    Server server =
        new Server("127.0.0.1", Settings.CLIENT_SUBSCRIBE_PORT, Settings.CLIENT_PUBLISH_PORT);
    server.start();

    // Create publisher and subscriber
    Publisher publisher = new Publisher("127.0.0.1", Settings.CLIENT_PUBLISH_PORT);
    Subscriber subscriber = new Subscriber("127.0.0.1", Settings.CLIENT_SUBSCRIBE_PORT);

    // Subscribe to test topic
    TestPubSubCallback cb = new TestPubSubCallback();
    subscriber.subscribe(topic, cb);
    Thread.sleep(1000);

    // Publish a message
    System.out.println("Publisher publishing " + "hello" + " on topic " + topic);
    publisher.publish(topic, PubSubProtos.StringMessage.newBuilder().setMessage("hello").build());
    cb.awaitMessage("hello");

    // Publish a message
    System.out.println("Publisher publishing " + "hello" + " on topic " + "badtest");
    publisher.publish(
        "badtest", PubSubProtos.StringMessage.newBuilder().setMessage("hello").build());
    cb.awaitNoMessage("hello");

    // Publish a message
    System.out.println("Publisher publishing " + "hello2" + " on topic " + topic);
    publisher.publish(topic, PubSubProtos.StringMessage.newBuilder().setMessage("hello2").build());
    cb.awaitMessage("hello2");

    // Unsubscribe
    subscriber.unsubscribe(topic, cb);
    Thread.sleep(1000);

    // Publish a message
    System.out.println("Publisher publishing " + "hello2" + " on topic " + topic);
    publisher.publish(topic, PubSubProtos.StringMessage.newBuilder().setMessage("hello2").build());
    cb.awaitNoMessage("hello2");
  }
 @Override
 public void subscribe(Subscriber<? super String> observer) {
   observer.onSubscribe(EmptySubscription.INSTANCE);
   boolean errorThrown = false;
   for (String s : valuesToReturn) {
     if (s == null) {
       System.out.println("throwing exception");
       observer.onError(new NullPointerException());
       errorThrown = true;
       // purposefully not returning here so it will continue calling onNext
       // so that we also test that we handle bad sequences like this
     } else {
       observer.onNext(s);
     }
   }
   if (!errorThrown) {
     observer.onComplete();
   }
 }
Beispiel #27
0
  public static void main(String[] args) throws XMPPException {

    /** Erzeugen von Instanzen */
    NodeService service = new NodeService();
    Publisher pub = new Publisher();
    Subscriber sub = new Subscriber();

    /** NodeService erstellt/löscht/verändert Knoten und lässt sich Informationen ausgeben */
    service.connect(ups);
    service.getNodes();
    service.printNode("Bruno");
    System.out.println("");
    service.disconnect();

    System.out.println("");

    /**
     * Subscriber prüft nach neuen Nachrichten
     *
     * <p>Publisher löscht/erstellt neue Nachricht
     */
    pub.connect(u1);
    pub.deleteMessage("1", "Bruno");
    pub.addPayloadMessage("1", "Bruno");
    pub.disconnect();

    System.out.println("");

    /*
     * Subscriber lässt sich alle Knoten ausgeben und abonniert einen Knoten
     */
    sub.connect(u3);
    sub.getNodes();
    sub.abonnieren("Bruno", u3);
    sub.disconnect();

    System.out.println("");

    /** NodeService lässt sich Infomationen ausgeben */
    service.connect(ups);
    service.printNode("Bruno");
    service.disconnect();
  }
 /**
  * Returns all subscribers for the given listener grouped by the type of event they subscribe to.
  */
 private Multimap<Class<?>, Subscriber> findAllSubscribers(Object listener) {
   Multimap<Class<?>, Subscriber> methodsInListener = HashMultimap.create();
   Class<?> clazz = listener.getClass();
   for (Method method : getAnnotatedMethods(clazz)) {
     Class<?>[] parameterTypes = method.getParameterTypes();
     Class<?> eventType = parameterTypes[0];
     methodsInListener.put(eventType, Subscriber.create(bus, listener, method));
   }
   return methodsInListener;
 }
 @Override
 public void registerKeySubscriber(
     @NotNull RequestContext rc, @NotNull Subscriber<K> subscriber, @NotNull Filter<K> filter) {
   addToStats("keySubscription");
   final Boolean bootstrap = rc.bootstrap();
   final Subscriber<K> sub = subscriber(subscriber, filter);
   keySubscribers.add(sub);
   if (bootstrap != Boolean.FALSE && kvStore != null) {
     try {
       for (int i = 0; i < kvStore.segments(); i++) kvStore.keysFor(i, sub::onMessage);
       if (TRUE.equals(rc.endSubscriptionAfterBootstrap())) {
         sub.onEndOfSubscription();
         keySubscribers.remove(sub);
       }
     } catch (InvalidSubscriberException e) {
       keySubscribers.remove(sub);
     }
   }
 }
    @Override
    public void onError(Throwable t) {
      if (done) {
        RxJavaPlugins.onError(t);
        return;
      }
      done = true;

      actual.onError(t);
    }