Class: StompServer::Run

Inherits:
Object
  • Object
show all
Defined in:
lib/stomp_server.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Run

Returns a new instance of Run.



81
82
83
84
85
86
87
# File 'lib/stomp_server.rb', line 81

def initialize(opts)
  @opts = opts
  @queue_manager = nil
  @auth_required = nil
  @stompauth = nil
  @topic_manager = nil
end

Instance Attribute Details

#auth_requiredObject

Returns the value of attribute auth_required.



79
80
81
# File 'lib/stomp_server.rb', line 79

def auth_required
  @auth_required
end

#queue_managerObject

Returns the value of attribute queue_manager.



79
80
81
# File 'lib/stomp_server.rb', line 79

def queue_manager
  @queue_manager
end

#stompauthObject

Returns the value of attribute stompauth.



79
80
81
# File 'lib/stomp_server.rb', line 79

def stompauth
  @stompauth
end

#topic_managerObject

Returns the value of attribute topic_manager.



79
80
81
# File 'lib/stomp_server.rb', line 79

def topic_manager
  @topic_manager
end

Instance Method Details

#startObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/stomp_server.rb', line 96

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
  @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) ⇒ Object



89
90
91
92
93
94
# File 'lib/stomp_server.rb', line 89

def stop(pidfile)
  @queue_manager.stop
  puts "Stompserver shutting down" if $DEBUG
  EventMachine::stop_event_loop
  File.delete(pidfile)
end