File: server.rb

package info (click to toggle)
ruby-byebug 11.1.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,252 kB
  • sloc: ruby: 8,835; ansic: 1,662; sh: 6; makefile: 4
file content (47 lines) | stat: -rw-r--r-- 987 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# frozen_string_literal: true

require "socket"

module Byebug
  module Remote
    #
    # Server for remote debugging
    #
    class Server
      attr_reader :actual_port, :wait_connection

      def initialize(wait_connection:, &block)
        @thread = nil
        @wait_connection = wait_connection
        @main_loop = block
      end

      #
      # Start the remote debugging server
      #
      def start(host, port)
        return if @thread

        if wait_connection
          mutex = Mutex.new
          proceed = ConditionVariable.new
        end

        server = TCPServer.new(host, port)
        @actual_port = server.addr[1]

        yield if block_given?

        @thread = DebugThread.new do
          while (session = server.accept)
            @main_loop.call(session)

            mutex.synchronize { proceed.signal } if wait_connection
          end
        end

        mutex.synchronize { proceed.wait(mutex) } if wait_connection
      end
    end
  end
end