Class: SplitIoClient::SSE::EventSource::Client
- Inherits:
-
Object
- Object
- SplitIoClient::SSE::EventSource::Client
- Defined in:
- lib/splitclient-rb/sse/event_source/client.rb
Constant Summary collapse
- DEFAULT_READ_TIMEOUT =
70- CONNECT_TIMEOUT =
30_000- KEEP_ALIVE_RESPONSE =
"c\r\n:keepalive\n\n\r\n".freeze
- ERROR_EVENT_TYPE =
'error'.freeze
Instance Method Summary collapse
- #close(reconnect = false) ⇒ Object
- #connected? ⇒ Boolean
-
#initialize(config, read_timeout: DEFAULT_READ_TIMEOUT) {|_self| ... } ⇒ Client
constructor
A new instance of Client.
- #on_connected(&action) ⇒ Object
- #on_disconnect(&action) ⇒ Object
- #on_event(&action) ⇒ Object
- #start(url) ⇒ Object
Constructor Details
#initialize(config, read_timeout: DEFAULT_READ_TIMEOUT) {|_self| ... } ⇒ Client
Returns a new instance of Client.
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 15 def initialize(config, read_timeout: DEFAULT_READ_TIMEOUT) @config = config @read_timeout = read_timeout @connected = Concurrent::AtomicBoolean.new(false) @socket = nil @event_parser = SSE::EventSource::EventParser.new(config) @on = { event: ->(_) {}, connected: ->(_) {}, disconnect: ->(_) {} } yield self if block_given? end |
Instance Method Details
#close(reconnect = false) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 38 def close(reconnect = false) dispatch_disconnect(reconnect) @connected.make_false SplitIoClient::Helpers::ThreadHelper.stop(:connect_stream, @config) @socket&.close rescue StandardError => e @config.logger.error("SSEClient close Error: #{e.inspect}") end |
#connected? ⇒ Boolean
61 62 63 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 61 def connected? @connected.value end |
#on_connected(&action) ⇒ Object
30 31 32 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 30 def on_connected(&action) @on[:connected] = action end |
#on_disconnect(&action) ⇒ Object
34 35 36 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 34 def on_disconnect(&action) @on[:disconnect] = action end |
#on_event(&action) ⇒ Object
26 27 28 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 26 def on_event(&action) @on[:event] = action end |
#start(url) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/splitclient-rb/sse/event_source/client.rb', line 47 def start(url) @uri = URI(url) latch = Concurrent::CountDownLatch.new(1) connect_thread(latch) return false unless latch.wait(CONNECT_TIMEOUT) connected? rescue StandardError => e @config.logger.error("SSEClient start Error: #{e.inspect}") connected? end |