Class: Async::Background::Web::EventHub
- Inherits:
-
Object
- Object
- Async::Background::Web::EventHub
- Defined in:
- lib/async/background/web/event_hub.rb
Constant Summary collapse
- HEARTBEAT_FRAME =
":keepalive\n\n"- UNAVAILABLE_FRAME =
"event: unavailable\ndata: #{JSON.generate(error: 'unavailable')}\n\n".freeze
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
- #current_version ⇒ Object
- #frame_for(version) ⇒ Object
- #initial_frame ⇒ Object
-
#initialize(snapshot, serializer, metrics_reader: nil) ⇒ EventHub
constructor
A new instance of EventHub.
Constructor Details
#initialize(snapshot, serializer, metrics_reader: nil) ⇒ EventHub
Returns a new instance of EventHub.
12 13 14 15 16 17 18 19 20 |
# File 'lib/async/background/web/event_hub.rb', line 12 def initialize(snapshot, serializer, metrics_reader: nil) @snapshot = snapshot @serializer = serializer @metrics_reader = metrics_reader @mutex = Mutex.new @cached_version = nil @cached_frame = nil @closed = false end |
Instance Method Details
#close ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/async/background/web/event_hub.rb', line 46 def close @mutex.synchronize do @closed = true @cached_frame = nil @cached_version = nil end self end |
#closed? ⇒ Boolean
55 56 57 |
# File 'lib/async/background/web/event_hub.rb', line 55 def closed? @mutex.synchronize { @closed } end |
#current_version ⇒ Object
22 23 24 25 |
# File 'lib/async/background/web/event_hub.rb', line 22 def current_version @mutex.synchronize { raise ClosedError, 'event hub is closed' if @closed } @snapshot.data_version end |
#frame_for(version) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/async/background/web/event_hub.rb', line 27 def frame_for(version) @mutex.synchronize do raise ClosedError, 'event hub is closed' if @closed return @cached_frame if @cached_version == version && @cached_frame refresh_frame_locked! @cached_frame end end |
#initial_frame ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/async/background/web/event_hub.rb', line 37 def initial_frame @mutex.synchronize do raise ClosedError, 'event hub is closed' if @closed refresh_frame_locked! [@cached_version, @cached_frame] end end |