class Telos::Device

Attributes

host[RW]
port[RW]

Public Class Methods

new(host:, port: 9998) click to toggle source
# File lib/telos/device.rb, line 7
def initialize(host:, port: 9998)
  self.host = host
  self.port = port
end

Public Instance Methods

connect(reader_thread: false) { || ... } click to toggle source
# File lib/telos/device.rb, line 15
def connect(reader_thread: false)
  @server = TCPSocket.new host, port
  start_reader_thread if reader_thread
  if block_given?
    yield
    stop_reader_thread if reader_thread
    @server.close
  end
end
disconnect() click to toggle source
# File lib/telos/device.rb, line 25
def disconnect
  @server.close
end
read() click to toggle source
# File lib/telos/device.rb, line 35
def read
  if @mutex
    @mutex.synchronize do
      @messages.shift
    end
  else
    _read
  end
end
shows() click to toggle source
# File lib/telos/device.rb, line 12
def shows
end
write(command, arguments = {}) click to toggle source
# File lib/telos/device.rb, line 29
def write(command, arguments = {})
  message = Message.outgoing(command, arguments)

  @server.write(message.to_bytes)
end

Private Instance Methods

_read() click to toggle source
# File lib/telos/device.rb, line 46
def _read
  response_size = Message.response_size(@server.read(8))
  Message.incoming(@server.read(response_size))
end
start_reader_thread() click to toggle source
# File lib/telos/device.rb, line 51
def start_reader_thread
  @messages = []
  @mutex = Mutex.new
  @reader_thread ||= Thread.start(@messages) do |messages|
    loop do
      message = _read
      @mutex.synchronize do
        messages << message
      end
    end
  end
  Thread.pass # Make sure the reader thread starts
end
stop_reader_thread() click to toggle source
# File lib/telos/device.rb, line 65
def stop_reader_thread
  @reader_thread.terminate if @reader_thread
end