Class: Ferrum::Client::Subscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/ferrum/client/subscriber.rb

Constant Summary collapse

INTERRUPTIONS =
%w[Fetch.requestPaused Fetch.authRequired].freeze

Instance Method Summary collapse

Constructor Details

#initializeSubscriber

Returns a new instance of Subscriber.



8
9
10
11
12
13
14
# File 'lib/ferrum/client/subscriber.rb', line 8

def initialize
  @regular = Queue.new
  @priority = Queue.new
  @on = Concurrent::Hash.new

  start
end

Instance Method Details

#<<(message) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/ferrum/client/subscriber.rb', line 16

def <<(message)
  if INTERRUPTIONS.include?(message["method"])
    @priority.push(message)
  else
    @regular.push(message)
  end
end

#clear(session_id:) ⇒ Object



44
45
46
# File 'lib/ferrum/client/subscriber.rb', line 44

def clear(session_id:)
  @on.delete_if { |k, _| k.match?(session_id) }
end

#closeObject



39
40
41
42
# File 'lib/ferrum/client/subscriber.rb', line 39

def close
  @regular_thread&.kill
  @priority_thread&.kill
end

#off(event, id) ⇒ Object



30
31
32
33
# File 'lib/ferrum/client/subscriber.rb', line 30

def off(event, id)
  @on[event].delete_at(id)
  true
end

#on(event, &block) ⇒ Object



24
25
26
27
28
# File 'lib/ferrum/client/subscriber.rb', line 24

def on(event, &block)
  @on[event] ||= Concurrent::Array.new
  @on[event] << block
  @on[event].index(block)
end

#subscribed?(event) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/ferrum/client/subscriber.rb', line 35

def subscribed?(event)
  @on.key?(event)
end