Example #1
0
  /**
   * Execute poll on this device: create an array of messages, add them to the request queue, and
   * schedule the queue for processing.
   *
   * @param delay scheduling delay (in milliseconds)
   */
  public void doPoll(long delay) {
    long now = System.currentTimeMillis();
    ArrayList<QEntry> l = new ArrayList<QEntry>();
    synchronized (m_features) {
      int spacing = 0;
      for (DeviceFeature i : m_features.values()) {
        if (i.hasListeners()) {
          Msg m = i.makePollMsg();
          if (m != null) l.add(new QEntry(i, m, now + delay + spacing));
        }
        spacing += TIME_BETWEEN_POLL_MESSAGES;
      }
    }
    if (l.isEmpty()) return;
    synchronized (m_requestQueue) {
      for (QEntry e : l) {
        m_requestQueue.add(e);
      }
    }
    RequestQueueManager.s_instance().addQueue(this, now + delay);

    if (!l.isEmpty()) {
      synchronized (m_lastTimePolled) {
        m_lastTimePolled = now;
      }
    }
  }
Example #2
0
 /**
  * Enqueues message to be sent after a delay
  *
  * @param m message to be sent
  * @param f device feature that sent this message (so we can associate the response message with
  *     it)
  * @param d time (in milliseconds)to delay before enqueuing message
  */
 public void enqueueDelayedMessage(Msg m, DeviceFeature f, long delay) {
   long now = System.currentTimeMillis();
   synchronized (m_requestQueue) {
     m_requestQueue.add(new QEntry(f, m, now + delay));
   }
   if (!m.isBroadcast()) {
     m.setQuietTime(QUIET_TIME_DIRECT_MESSAGE);
   }
   logger.trace("enqueing direct message with delay {}", delay);
   RequestQueueManager.s_instance().addQueue(this, now + delay);
 }