lib/byebug/remote/client.rb
# frozen_string_literal: true
require "socket"
module Byebug
module Remote
#
# Client for remote debugging
#
class Client
attr_reader :interface, :socket
def initialize(interface)
@interface = interface
@socket = nil
end
#
# Connects to the remote byebug
#
def start(host = "localhost", port = PORT)
connect_at(host, port)
while (line = socket.gets)
case line
when /^PROMPT (.*)$/
input = interface.read_command(Regexp.last_match[1])
break unless input
socket.puts input
when /^CONFIRM (.*)$/
input = interface.readline(Regexp.last_match[1])
break unless input
socket.puts input
else
interface.puts line
end
end
socket.close
end
def started?
!socket.nil?
end
private
def connect_at(host, port)
interface.puts "Connecting to byebug server at #{host}:#{port}..."
@socket = TCPSocket.new(host, port)
interface.puts "Connected."
end
end
end
end