Class: ForestAdminDatasourceRpc::Utils::SseClient

Inherits:
Object
  • Object
show all
Defined in:
lib/forest_admin_datasource_rpc/Utils/sse_client.rb

Instance Method Summary collapse

Constructor Details

#initialize(uri, auth_secret, &on_rpc_stop) ⇒ SseClient

Returns a new instance of SseClient.



9
10
11
12
13
14
15
# File 'lib/forest_admin_datasource_rpc/Utils/sse_client.rb', line 9

def initialize(uri, auth_secret, &on_rpc_stop)
  @uri = uri
  @auth_secret = auth_secret
  @on_rpc_stop = on_rpc_stop
  @client = nil
  @closed = false
end

Instance Method Details

#closeObject



43
44
45
46
47
48
49
# File 'lib/forest_admin_datasource_rpc/Utils/sse_client.rb', line 43

def close
  return if @closed

  @closed = true
  @client&.close
  # ForestAdminRpcAgent::Facades::Container.logger.log('Debug', '[SSE] Client closed')
end

#startObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/forest_admin_datasource_rpc/Utils/sse_client.rb', line 17

def start
  return if @closed

  timestamp = Time.now.utc.iso8601
  signature = generate_signature(timestamp)

  headers = {
    'Accept' => 'text/event-stream',
    'X_TIMESTAMP' => timestamp,
    'X_SIGNATURE' => signature
  }

  ForestAdminRpcAgent::Facades::Container.logger.log('Debug', "Connecting to SSE at #{@uri}.")

  @client = SSE::Client.new(@uri, headers: headers) do |client|
    client.on_event do |event|
      handle_event(event)
    end

    client.on_error do |err|
      # TODO: optimisation on client close
      # ForestAdminRpcAgent::Facades::Container.logger.log('Warn', "[SSE] Error: #{err.class} - #{err.message}")
    end
  end
end