class GQTP::Server

Attributes

host[RW]
port[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/gqtp/server.rb, line 23
def initialize(options={})
  @options = options.dup
  @options[:host] ||= @options[:address] || "0.0.0.0"
  @options[:port] ||= 10043
  @on_request = nil
  @on_connect = nil
end

Public Instance Methods

on_connect(*arguments, &block) click to toggle source
# File lib/gqtp/server.rb, line 42
def on_connect(*arguments, &block)
  if block_given?
    @on_connect = block
  else
    client, = arguments
    if @on_connect
      @on_connect.call(client)
    else
      nil
    end
  end
end
on_request(*arguments, &block) click to toggle source
# File lib/gqtp/server.rb, line 55
def on_request(*arguments, &block)
  if block_given?
    @on_request = block
  else
    request, client, connect_info = arguments
    @on_request.call(request, client, connect_info)
  end
end
run() click to toggle source
# File lib/gqtp/server.rb, line 31
def run
  @backend = create_backend
  @backend.run do |client|
    process_request(client, on_connect(client))
  end
end
shutdown() click to toggle source
# File lib/gqtp/server.rb, line 38
def shutdown
  @backend.shutdown
end

Private Instance Methods

create_backend() click to toggle source
# File lib/gqtp/server.rb, line 65
def create_backend
  # :connection is just for backward compatibility.
  backend = @options[:backend] || @options[:connection] || :thread

  begin
    require "gqtp/backend/#{backend}"
  rescue LoadError
    raise ArgumentError, "unknown backend: <#{backend.inspect}>: #{$!}"
  end

  module_name = backend.to_s.capitalize
  backend_module = GQTP::Backend::const_get(module_name)
  backend_module::Server.new(@options)
end
process_request(client, connect_info) click to toggle source
# File lib/gqtp/server.rb, line 80
def process_request(client, connect_info)
  client.read(Header.size) do |header|
    request_header = Header.parse(header)
    client.read(request_header.size) do |body|
      request = Request.new(request_header, body)
      on_request(request, client, connect_info)
      process_request(client, connect_info)
    end
  end
end