class GQTP::Proxy

Attributes

listen_host[RW]
listen_port[RW]
upstream_host[RW]
upstream_port[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/gqtp/proxy.rb, line 24
def initialize(options={})
  @options = options.dup
  @listen_host = @options[:listen_host] || @options[:listen_address]
  @listen_host ||= "0.0.0.0"
  @listen_port = @options[:listen_port] || 10043
  @upstream_host = @options[:upstream_host] || @options[:upstream_address]
  @upstream_host ||= "127.0.0.1"
  @upstream_port = @options[:upstream_port] || 10043
  # :connection is just for backward compatibility.
  @backend = @options[:backend] || @options[:connection] || :thread
  @server = Server.new(:host => @listen_host,
                       :port => @listen_port,
                       :backend => @backend)
end

Public Instance Methods

run() click to toggle source
# File lib/gqtp/proxy.rb, line 39
def run
  @server.on_connect do |client|
    create_backend
  end
  @server.on_request do |request, client, backend|
    backend.write(request.header.pack, request.body) do
      backend.read(Header.size) do |header|
        response_header = Header.parse(header)
        backend.read(response_header.size) do |body|
          client.write(header, body) do
          end
        end
      end
    end
  end
  @server.run
end
shutdown() click to toggle source
# File lib/gqtp/proxy.rb, line 57
def shutdown
  @server.shutdown
end

Private Instance Methods

create_backend() click to toggle source
# File lib/gqtp/proxy.rb, line 62
def create_backend
  begin
    require "gqtp/backend/#{@backend}"
  rescue LoadError
    raise ArgumentError, "unknown backend: <#{@backend.inspect}>: #{$!}"
  end

  require "gqtp/backend/#{@backend}"
  module_name = @backend.to_s.capitalize
  backend_module = GQTP::Backend::const_get(module_name)
  backend_module::Client.new(:host => @upstream_host,
                             :port => @upstream_port)
end