class StompServer::Run

Attributes

auth_required[RW]
queue_manager[RW]
stompauth[RW]
topic_manager[RW]

Public Class Methods

new(opts) click to toggle source
# File lib/stomp_server.rb, line 83
def initialize(opts)
  @opts = opts
  @queue_manager = nil
  @auth_required = nil
  @stompauth = nil
  @topic_manager = nil
end

Public Instance Methods

start() click to toggle source
# File lib/stomp_server.rb, line 98
def start
  begin
    if @opts[:group]
      puts "Changing group to #{@opts[:group]}."
      Process::GID.change_privilege(Etc.getgrnam(@opts[:group]).gid)
    end

    if @opts[:user]
      puts "Changing user to #{@opts[:user]}."
      Process::UID.change_privilege(Etc.getpwnam(@opts[:user]).uid)
    end
  rescue Errno::EPERM
    puts "FAILED to change user:group #{@opts[:user]}:#{@opts[:group]}: #$!"
    exit 1
  end

  Dir.mkdir(@opts[:working_dir]) unless File.directory?(@opts[:working_dir])
  Dir.mkdir(@opts[:logdir]) unless File.directory?(@opts[:logdir])
  Dir.mkdir(@opts[:etcdir]) unless File.directory?(@opts[:etcdir])

  if @opts[:daemon]
    Daemonize.daemonize(log_file=@opts[:logfile])
    # change back to the original starting directory
    Dir.chdir(@opts[:working_dir])
  end

  # Write pidfile
  open(@opts[:pidfile],"w") {|f| f.write(Process.pid) }

  if @opts[:queue] == 'dbm'
    qstore=StompServer::DBMQueue.new(@opts[:storage])
  elsif @opts[:queue] == 'file'
    qstore=StompServer::FileQueue.new(@opts[:storage])
  elsif @opts[:queue] == 'activerecord'
    require 'stomp_server/queue/activerecord_queue'
    qstore=StompServer::ActiveRecordQueue.new(@opts[:etcdir], @opts[:storage])
  else
    qstore=StompServer::MemoryQueue.new
  end
  qstore.checkpoint_interval = @opts[:checkpoint]
  puts "Checkpoing interval is #{qstore.checkpoint_interval}" if $DEBUG
  @topic_manager = StompServer::TopicManager.new
  @queue_manager = StompServer::QueueManager.new(qstore)
  @auth_required = @opts[:auth]

  if @auth_required
    @stompauth = StompServer::StompAuth.new(@opts[:passwd])
  end

  trap("INT") { puts "INT signal received.";stop(@opts[:pidfile]) }
end
stop(pidfile) click to toggle source
# File lib/stomp_server.rb, line 91
def stop(pidfile)
  @queue_manager.stop
  puts "Stompserver shutting down" if $DEBUG
  EventMachine::stop_event_loop
  File.delete(pidfile)
end