class QRPC::Server::Job

Queue RPC job.

Constants

DEFAULT_PRIORITY

Indicates default priority. @deprecated (since 0.2.0)

Public Class Methods

new(api, synchronicity, job, protocol = QRPC::default_protocol) click to toggle source

Constructor.

@param [Object] object which will serve as API @param [Symbol] synchronicity API methods synchronicity @param [Object] job beanstalk job @param [QRPC::Protocol::Abstract] protocol protocol handling instance

# File lib/qrpc/server/job.rb, line 69
def initialize(api, synchronicity, job, protocol = QRPC::default_protocol)
    @synchronicity = synchronicity
    @protocol = protocol
    @job = job
    @api = api
end

Public Instance Methods

client() click to toggle source

Returns client identifier. @return [String] client identifier

# File lib/qrpc/server/job.rb, line 166
def client
    self.request.client
end
priority() click to toggle source

Returns job priority according to request.

Default priority is 50. You can scale up and down according to your needs in fact without limits.

@return [Integer] priority level

# File lib/qrpc/server/job.rb, line 150
def priority
    priority = self.request.priority
    if priority.nil?
        priority = QRPC::DEFAULT_PRIORITY
    else
        priority = priority.to_i
    end
    
    return priority
end
process!() click to toggle source

Starts processing.

# File lib/qrpc/server/job.rb, line 80
def process!
    result = nil
    error = nil
    request = self.request
    
    if not request.notification?
        finalize = Proc::new do
            options = {
                :result => result,
                :error => error,
                :request => request
            }
            
            response = @protocol.response::new(options)
            self.set_deferred_status(:succeeded, response.serialize)
        end
    end

    
    if @synchronicity == :synchronous
        begin
            result = @api.send(request.method, *request.params)
        rescue ::Exception => e
            if not request.notification?
                error = self.generate_error(request, e)
            end
        end
        
        if not request.notification?
            finalize.call()
        end
    else                
        begin
            @api.send(request.method, *request.params) do |res|
                if not request.notification?
                    result = res
                    finalize.call()
                end
            end
        rescue ::Exception => e
            if not request.notification?
                error = self.generate_error(request, e)
                finalize.call()
            end
        end                    
    end
end
request() click to toggle source

Returns job in request form. @return [QRPC::Protocol::Abstract::Request] request associated to job

# File lib/qrpc/server/job.rb, line 133
def request
    if @request.nil?
        @request = @protocol.request::parse(@job)
    else
        @request
    end
end

Protected Instance Methods

generate_error(request, exception) click to toggle source

Generates error from exception.

# File lib/qrpc/server/job.rb, line 177
def generate_error(request, exception)
    options = {
        :exception => exception,
        :request => request
    }
    
    @protocol.error::new(options)
end