class StompServer::DBMQueue
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
StompServer::Queue.new
# File lib/stomp_server/queue/dbm_queue.rb, line 5 def initialize *args super # Please don't use dbm files for storing large frames, it's problematic at best and uses large amounts of memory. # sdbm croaks on marshalled data that contains certain characters, so we don't use it at all @dbm = false if RUBY_PLATFORM =~/linux|bsd/ types = ['bdb','dbm','gdbm'] else types = ['bdb','gdbm'] end types.each do |dbtype| begin require dbtype @dbm = dbtype puts "#{@dbm} loaded" break rescue LoadError => e end end raise "No DBM library found. Tried bdb,dbm,gdbm" unless @dbm @db = Hash.new @queues.keys.each {|q| _open_queue(q)} end
Public Instance Methods
_close_queue(dest)
click to toggle source
# File lib/stomp_server/queue/dbm_queue.rb, line 49 def _close_queue(dest) @db[dest][:dbh].close dbname = @db[dest][:dbname] File.delete(dbname) if File.exists?(dbname) File.delete("#{dbname}.db") if File.exists?("#{dbname}.db") File.delete("#{dbname}.pag") if File.exists?("#{dbname}.pag") File.delete("#{dbname}.dir") if File.exists?("#{dbname}.dir") end
_open_queue(dest)
click to toggle source
# File lib/stomp_server/queue/dbm_queue.rb, line 40 def _open_queue(dest) queue_name = dest.gsub('/', '_') dbname = @directory + '/' + queue_name @db[dest] = Hash.new @db[dest][:dbh] = dbmopen(dbname) @db[dest][:dbname] = dbname end
_readframe(dest,msgid)
click to toggle source
# File lib/stomp_server/queue/dbm_queue.rb, line 62 def _readframe(dest,msgid) frame_image = @db[dest][:dbh][msgid] Marshal::load(frame_image) end
_writeframe(dest,frame,msgid)
click to toggle source
# File lib/stomp_server/queue/dbm_queue.rb, line 58 def _writeframe(dest,frame,msgid) @db[dest][:dbh][msgid] = Marshal::dump(frame) end
dbmopen(dbname)
click to toggle source
# File lib/stomp_server/queue/dbm_queue.rb, line 29 def dbmopen(dbname) if @dbm == 'bdb' BDB::Hash.new(dbname, nil, "a") elsif @dbm == 'dbm' DBM.open(dbname) elsif @dbm == 'gdbm' GDBM.open(dbname) end end