class Async

Simple implementation of {docs.python.org/2/library/asyncore.html Python Asyncore}

Public Class Methods

check(timeout=false, map=false) click to toggle source

Checks sockets from map objects using {IO.select} @param [Float] timeout timeout in seconds, passed to {IO.select} @param [Hash] map list of objects implements asyncore methods

# File lib/bellite.rb, line 17
def Async.check(timeout=false, map=false)
    if not map
        map = @@map
    end
    readable = []
    writable = []
    excepted = []

    changedCount = 0
    map.each do |obj|
        if obj.writable?
            if obj.fileno
                writable << obj.fileno
            end
        end

        if obj.readable?
            if obj.fileno
                readable << obj.fileno
            end
        end

        if obj.exceptable?
            if obj.fileno
                excepted << obj.fileno
            end
        end
    end

    if readable.size == 0 and writable.size == 0 and excepted.size == 0
        return false
    end

    if (timeout)
        r,w,e = IO.select(readable, writable, excepted,timeout)
    else
        r,w,e = IO.select(readable, writable, excepted)
    end
    map.each do |obj|
        if obj.writable? and w.include? obj.fileno
            obj.handle_write_event
        end
        if obj.readable? and r.include? obj.fileno
            obj.handle_read_event
        end
        if obj.exceptable? and e.include? obj.fileno
            obj.handle_expt_event
        end
    end

    return r.size + w.size + e.size
end
loop(timeout, map=false) click to toggle source

Running check while at least one socket in objects map is connected @param [Float] timeout - timeout, passed to {.check} @param [Hash] map, passed to {.check}

# File lib/bellite.rb, line 73
def Async.loop(timeout, map=false)
    return Async.check(timeout, map) != false
end