# File lib/pry-remote-em/broker.rb, line 100 def connected? @connected end
# File lib/pry-remote-em/broker.rb, line 75 def expand_url(url) return Array(url) if (u = URI.parse(url)).host != '0.0.0.0' Socket.ip_address_list.select { |a| a.ipv4? } .map(&:ip_address).map{|i| u.clone.tap{|mu| mu.host = i } } end
# File lib/pry-remote-em/broker.rb, line 96 def hbeats @hbeats ||= {} end
# File lib/pry-remote-em/broker.rb, line 54 def log return opts[:logger] if opts[:logger] @log ||= Logger.new(STDERR) end
# File lib/pry-remote-em/broker.rb, line 159 def initialize(opts = {:tls => false}, &blk) @opts = opts end
# File lib/pry-remote-em/broker.rb, line 63 def register(url, name = 'unknown') expand_url(url).each do |u| client { |c| c.send_register_server(u, name) } end end
# File lib/pry-remote-em/broker.rb, line 38 def restart log.info("[pry-remote-em broker] restarting on pryem://#{host}:#{port}") @waiting = nil @client = nil run(@host, @port, @opts) do PryRemoteEm.servers.each do |url, (sig, name)| next unless EM.get_sockname(sig) register(url, name) end end end
# File lib/pry-remote-em/broker.rb, line 12 def run(host = ENV['PRYEMBROKER'] || DEF_BROKERHOST, port = ENV['PRYEMBROKERPORT'] || DEF_BROKERPORT, opts = {:tls => false}) raise "root permission required for port below 1024 (#{port})" if port < 1024 && Process.euid != 0 @host = host @port = port # Brokers cannot use SSL directly. If they do then when a proxy request to an SSL server is received # the client and server will not be able to negotiate a SSL session. The proxied traffic can be SSL # encrypted, but the SSL session will be between the client and the server. opts = opts.dup opts[:tls] = false @opts = opts begin EM.start_server(host, port, PryRemoteEm::Broker, opts) do |broker| end log.info("[pry-remote-em broker] listening on #{opts[:tls] ? 'pryems' : 'pryem'}://#{host}:#{port}") @listening = true rescue => e # EM 1.0.0.beta4's message tells us the port is in use; 0.12.10 just says, 'no acceptor' if (e.message.include?('port is in use') || e.message.include?('no acceptor')) # [pry-remote-em broker] a broker is already listening on #{host}:#{port} else raise e end end client { |c| yield self } if block_given? end
# File lib/pry-remote-em/broker.rb, line 59 def servers @servers ||= {} end
# File lib/pry-remote-em/broker.rb, line 92 def timers @timers ||= {} end
# File lib/pry-remote-em/broker.rb, line 180 def peer_ip return @peer_ip if @peer_ip return "" if get_peername.nil? @peer_port, @peer_ip = Socket.unpack_sockaddr_in(get_peername) @peer_ip end
# File lib/pry-remote-em/broker.rb, line 187 def peer_port return @peer_port if @peer_port return "" if get_peername.nil? @peer_port, @peer_ip = Socket.unpack_sockaddr_in(get_peername) @peer_port end
# File lib/pry-remote-em/broker.rb, line 167 def post_init port, ip = Socket.unpack_sockaddr_in(get_peername) log.info("[pry-remote-em broker] received client connection from #{ip}:#{port}") send_banner("PryRemoteEm #{VERSION} #{@opts[:tls] ? 'pryems' : 'pryem'}") @opts[:tls] ? start_tls : send_server_list(Broker.servers) end
# File lib/pry-remote-em/broker.rb, line 153 def receive_proxy_connection(url) log.info("[pry-remote-em broker] proxying to #{url}") url = URI.parse(url) EM.connect(url.host, url.port, Client::Proxy, self) end
# File lib/pry-remote-em/broker.rb, line 136 def receive_register_server(url, name) url = URI.parse(url) url.host = peer_ip if ['0.0.0.0', 'localhost', '127.0.0.1'].include?(url.host) log.info("[pry-remote-em broker] registered #{url} - #{name.inspect}") unless Broker.servers[url] == name Broker.servers[url] = name Broker.hbeats[url] = Time.new Broker.watch_heartbeats(url) name end
# File lib/pry-remote-em/broker.rb, line 132 def receive_server_list send_server_list(Broker.servers) end
# File lib/pry-remote-em/broker.rb, line 146 def receive_unregister_server(url) url = URI.parse(url) url.host = peer_ip if ['0.0.0.0', 'localhost', '127.0.0.1'].include?(url.host) log.warn("[pry-remote-em broker] unregister #{url}") Broker.servers.delete(url) end
Generated with the Darkfish Rdoc Generator 2.