class Rock::WebApp::Tasks::CachedPorts

Public Class Methods

new() click to toggle source
# File lib/rock/webapp/tasks/cached_ports.rb, line 6
def initialize
    @portentries = {}
    @timer = nil
end

Public Instance Methods

add(port, name_service, name, port_name, init = false, timeout) click to toggle source

timeout == 0 won't start a timer to delete the port

# File lib/rock/webapp/tasks/cached_ports.rb, line 102
def add(port, name_service, name, port_name, init = false, timeout)
    #puts "added writer with #{timeout} timeout"
    port_entry = PortEntry.new(port, timeout, init)
    key = generate_key(name_service, name, port_name)
    @portentries[key] = port_entry
    #puts "add writer size: #{@writers.length}"
    if timeout > 0
        create_timed_delete(timeout, port_entry)
    end
    port_entry
end
create_timed_delete(timeout, port_entry) click to toggle source

can take Interger of Time as timeout arg

# File lib/rock/webapp/tasks/cached_ports.rb, line 132
def create_timed_delete(timeout, port_entry)
    mtimer = EM.add_timer(timeout.to_i) do
        time_left = port_entry.lifetime_left
        if time_left > 0
            #puts "object has #{time_left} seconds left, #{Time.now}"
            create_timed_delete(time_left, port_entry)
        else
            #puts "timed delete writer #{Time.now}"
            @portentries.delete(@portentries.key(port_entry))
        end
    end
    port_entry.timer = mtimer
end
delete(name_service, name, port_name) click to toggle source

force-delete a port, no matter if there are pending timeouts

# File lib/rock/webapp/tasks/cached_ports.rb, line 162
def delete(name_service, name, port_name)
    key = generate_key(name_service, name, port_name)
    #puts key + "deleting #{Time.now}"
    @portentries.delete(key)
end
generate_key(name_service, name, port_name) click to toggle source
# File lib/rock/webapp/tasks/cached_ports.rb, line 168
def generate_key(name_service, name, port_name)
    name_service+name+port_name
end
get(name_service, name, port_name, timeout) click to toggle source

timeout == 0 will cancel the running EM timer (re-started at delete)

# File lib/rock/webapp/tasks/cached_ports.rb, line 115
def get(name_service, name, port_name, timeout)
    key = generate_key(name_service, name, port_name)
    port_entry = @portentries[key]
    if port_entry && port_entry.connected?
        if timeout == 0
            #puts "cancelling timer"
            EM.cancel_timer(port_entry.timer)
            port_entry.timer=nil
        end
        return port_entry 
    else
        @portentries.delete(key)
        return nil
    end
end
soft_delete(name_service, name, port_name) click to toggle source

don't delete if there is lifetime left this may happen, when the port was initially created withpout lifetime (user delete) but used by another part with a timeout

# File lib/rock/webapp/tasks/cached_ports.rb, line 149
def soft_delete(name_service, name, port_name)
    key = generate_key(name_service, name, port_name)
    #puts key + "soft deleting #{Time.now}"
    port_entry = @portentries[key]
    if port_entry && port_entry.lifetime_left > 0
        create_timed_delete(port_entry.lifetime_left, port_entry)
        #puts key + "soft deleting #{Time.now} new timer #{port_entry.lifetime_left}"
    else
        @portentries.delete(key)
    end
end