Class: Schematic::DataStream::WebSocketClient

Inherits:
Object
  • Object
show all
Defined in:
lib/schematic/datastream/websocket_client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, api_key:, logger:, message_handler:, ready_handler: nil) ⇒ WebSocketClient

Returns a new instance of WebSocketClient.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/schematic/datastream/websocket_client.rb', line 33

def initialize(base_url:, api_key:, logger:, message_handler:, ready_handler: nil)
  @base_url = base_url
  @api_key = api_key
  @logger = logger
  @message_handler = message_handler
  @ready_handler = ready_handler
  @connected = false
  @ready = false
  @should_reconnect = true
  @reconnect_attempts = 0
  @mutex = Mutex.new
  @write_mutex = Mutex.new
  @connect_mutex = Mutex.new
  @connecting = false
  @socket = nil
  @read_thread = nil
  @ping_thread = nil
  @stopped = false
  @url = build_ws_url(base_url)
  @last_pong = Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

Instance Attribute Details

#connectedObject (readonly)

Returns the value of attribute connected.



31
32
33
# File 'lib/schematic/datastream/websocket_client.rb', line 31

def connected
  @connected
end

#readyObject (readonly)

Returns the value of attribute ready.



31
32
33
# File 'lib/schematic/datastream/websocket_client.rb', line 31

def ready
  @ready
end

#urlObject (readonly)

Returns the value of attribute url.



31
32
33
# File 'lib/schematic/datastream/websocket_client.rb', line 31

def url
  @url
end

Instance Method Details

#closeObject



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/schematic/datastream/websocket_client.rb', line 60

def close
  @mutex.synchronize do
    @should_reconnect = false
    @stopped = true
    @connected = false
    @ready = false
  end

  close_socket
  @ping_thread&.join(5)
  @read_thread&.join(5)
end

#send_message(data) ⇒ Object



73
74
75
76
77
78
79
80
# File 'lib/schematic/datastream/websocket_client.rb', line 73

def send_message(data)
  return unless @connected

  msg = JSON.generate(data)
  write_frame(:text, msg)
rescue StandardError => e
  @logger.error("WebSocket send error: #{e.message}")
end

#startObject



55
56
57
58
# File 'lib/schematic/datastream/websocket_client.rb', line 55

def start
  @should_reconnect = true
  Thread.new { connect }
end