Sha256: 13868fc2a23be4821f6c5ed9babb4b6d6b29ec5d66d467ab5663a2d00a73a361
Contents?: true
Size: 1.57 KB
Versions: 3
Compression:
Stored size: 1.57 KB
Contents
require "faye/websocket" require "eventmachine" class SubstrateClient::Websocket HEARTBEAT_INTERVAL = 3 RECONNECT_INTERVAL = 3 def initialize(url, onopen: nil, onmessage: nil) @url = url @onopen = onopen || proc { p [:open] } @onmessage = onmessage || proc { |event| p [:message, event.data] } @thread = Thread.new do EM.run do start_connection end SubstrateClient.logger.info "Event loop stopped" end @heartbeat_thread = start_heartbeat end def start_connection SubstrateClient.logger.info "Start to connect" @close = false @missed_heartbeats = 0 @ping_id = 0 @ws = Faye::WebSocket::Client.new(@url) @ws.on :open do |event| @do_heartbeat = true @onopen.call event end @ws.on :message do |event| @onmessage.call event end @ws.on :close do |event| # p [:close, event.code, event.reason] if @close == false @do_heartbeat = false sleep RECONNECT_INTERVAL start_connection end end end def start_heartbeat Thread.new do loop do send_heartbeat if @do_heartbeat sleep HEARTBEAT_INTERVAL end end end def send_heartbeat if @missed_heartbeats < 2 # puts "ping_#{@ping_id}" @ws.ping @ping_id.to_s do # puts "pong" @missed_heartbeats -= 1 end @missed_heartbeats += 1 @ping_id += 1 end end def send(message) @ws.send message end def close @close = true Thread.kill @heartbeat_thread Thread.kill @thread @ws = nil end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
substrate_client.rb-0.1.7 | lib/websocket.rb |
substrate_client.rb-0.1.6 | lib/websocket.rb |
substrate_client.rb-0.1.5 | lib/websocket.rb |