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