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])
Dir.chdir(@opts[:working_dir])
end
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