module BitGirder::Concurrent::EmUtils

Public Class Methods

defer( callback, &blk ) click to toggle source
# File lib/bitgirder/concurrent.rb, line 377
def defer( callback, &blk )
    
    ensure_em

    not_nil( callback, :callback )
    raise "Need an operation block" unless blk
    
    op = 
        lambda do
            begin
                Completion.create_success( blk.call )
            rescue Exception => e
                Completion.create_failure( e )
            end
        end
    
    EM.defer( op, callback )
end
ensure_em() click to toggle source
# File lib/bitgirder/concurrent.rb, line 370
def self.ensure_em   
    unless @@did_require
        Concurrent.require_em
        @@did_require = true
    end
end

Private Instance Methods

defer( callback, &blk ) click to toggle source
# File lib/bitgirder/concurrent.rb, line 377
def defer( callback, &blk )
    
    ensure_em

    not_nil( callback, :callback )
    raise "Need an operation block" unless blk
    
    op = 
        lambda do
            begin
                Completion.create_success( blk.call )
            rescue Exception => e
                Completion.create_failure( e )
            end
        end
    
    EM.defer( op, callback )
end