def listen_loop_wait(started_at, interval, routing_keys, &handler)
      if @listen_interval == 0
        EM_S.next_tick { listen_loop(routing_keys, &handler) }
      else
        @listen_timer = EM_S::Timer.new(interval) do
          remaining = @listen_interval - (Time.now - started_at)
          if remaining > 0
            listen_loop_wait(started_at, remaining, routing_keys, &handler)
          else
            listen_loop(routing_keys, &handler)
          end
        end
      end
      true
    end
def listen_loop_wait(started_at, interval, routing_keys, &handler)
      if @listen_interval == 0
        EM_S.next_tick { listen_loop(routing_keys, &handler) }
      else
        @listen_timer = EM_S::Timer.new(interval) do
          remaining = @listen_interval - (Time.now - started_at)
          if remaining > 0
            listen_loop_wait(started_at, remaining, routing_keys, &handler)
          else
            listen_loop(routing_keys, &handler)
          end
        end
      end
      true
    end
Wait specified interval before next listen loop
 Continue waiting if interval changes while waiting

 @param [Time] started_at time when first started waiting
 @param [Numeric] interval to wait
 @param [Array, NilClass] routing_keys for event sources of interest with nil meaning all

 @yield [event] required block called each time event received
 @yieldparam [Hash] event received

 @return [TrueClass] always true