Module: RubyLens::Clip::DeadlineIO

Defined in:
lib/rubylens/clip/deadline_io.rb

Overview

Deadline-bounded, non-blocking socket reads shared by the DevTools WebSocket channel and the local DevTools HTTP client.

Class Method Summary collapse

Class Method Details

.deadline(timeout) ⇒ Object



14
# File 'lib/rubylens/clip/deadline_io.rb', line 14

def deadline(timeout) = monotonic + timeout

.monotonicObject



12
# File 'lib/rubylens/clip/deadline_io.rb', line 12

def monotonic = Process.clock_gettime(Process::CLOCK_MONOTONIC)

.read_chunk(socket, deadline, closed_message:, timeout_message:) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/rubylens/clip/deadline_io.rb', line 16

def read_chunk(socket, deadline, closed_message:, timeout_message:)
  remaining = deadline - monotonic
  raise Error, timeout_message if remaining <= 0
  IO.select([socket], nil, nil, remaining) or raise Error, timeout_message
  chunk = socket.read_nonblock(1 << 20, exception: false)
  raise Error, closed_message if chunk.nil?
  chunk.is_a?(String) ? chunk : "".b
rescue SystemCallError, IOError => error
  raise Error, "#{closed_message}: #{error.message}"
end