21 |
require 'getoptlong' |
require 'getoptlong' |
22 |
|
|
23 |
require 'bts/config' |
require 'bts/config' |
24 |
|
require 'bts/exception' |
25 |
|
require 'bts/session' |
26 |
|
|
27 |
module BTS |
module BTS |
28 |
|
|
67 |
puts "bugcommd (BugCommunicator #{@version})" |
puts "bugcommd (BugCommunicator #{@version})" |
68 |
exit 0 |
exit 0 |
69 |
when '--verbose' |
when '--verbose' |
70 |
@@verbosity.succ! |
@@verbosity += 1 |
71 |
when '--config' |
when '--config' |
72 |
@config_file = arg |
@config_file = arg |
73 |
when '--log' |
when '--log' |
100 |
|
|
101 |
@config = Config.new(@config_file) |
@config = Config.new(@config_file) |
102 |
|
|
103 |
|
@socket = TCPServer.open(@config.server_port) |
104 |
|
at_exit { @socket.close } |
105 |
|
|
106 |
if @log_file.nil? and @daemonized |
if @log_file.nil? and @daemonized |
107 |
require 'syslog' |
require 'syslog' |
108 |
@@log = Syslog.open('bugcommd', |
@@log = Syslog.open('bugcommd', |
164 |
$stderr.close |
$stderr.close |
165 |
end |
end |
166 |
|
|
167 |
Thread.start do |
begin |
168 |
$SAFE = 2 |
Thread.start do |
169 |
main() |
$SAFE = 2 |
170 |
end.join |
main() |
171 |
|
end.join |
172 |
|
rescue SignalException, Interrupt, ScriptError, NoMemoryError, |
173 |
|
StandardError, BugCommError => e |
174 |
|
@@log.err("%s", e.message) |
175 |
|
@@log.err("%s", e.backtrace.join("\n")) |
176 |
|
exit(1) |
177 |
|
end |
178 |
end |
end |
179 |
|
|
180 |
def main |
def main |
181 |
|
while true |
182 |
|
Thread.start(Session.new(@socket.accept, @config)) do |session| |
183 |
|
begin |
184 |
|
session.run |
185 |
|
rescue ScriptError, NoMemoryError, StandardError, BugCommError => e |
186 |
|
@@log.err("%s", e.message) |
187 |
|
@@log.err("%s", e.backtrace.join("\n")) |
188 |
|
ensure |
189 |
|
session.close |
190 |
|
end |
191 |
|
end |
192 |
|
end |
193 |
end |
end |
194 |
private :main |
private :main |
195 |
end |
end |