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.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/schematic/datastream/websocket_client.rb', line 43

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.



41
42
43
# File 'lib/schematic/datastream/websocket_client.rb', line 41

def connected
  @connected
end

#readyObject (readonly)

Returns the value of attribute ready.



41
42
43
# File 'lib/schematic/datastream/websocket_client.rb', line 41

def ready
  @ready
end

#urlObject (readonly)

Returns the value of attribute url.



41
42
43
# File 'lib/schematic/datastream/websocket_client.rb', line 41

def url
  @url
end

Instance Method Details

#closeObject



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

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



83
84
85
86
87
88
89
90
# File 'lib/schematic/datastream/websocket_client.rb', line 83

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



65
66
67
68
# File 'lib/schematic/datastream/websocket_client.rb', line 65

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