def receive_line(line)
line = line.to_s
domain_name, line_without_domain_name = line.split(" ",2)
filehandle = nil
domain = @domain_objects[domain_name]
if domain and [0, domain.uid].include?(Process.uid) and [0, domain.gid].include?(Process.gid)
log_filename = File.expand_path(File.join(domain.log_dir, self.log_filename))
filehandle = self.filehandles.find{|fh| fh.is_a?(File) and fh.path == log_filename}
self.filehandles.delete(filehandle)
unless filehandle.is_a?(File) and not filehandle.closed?
if self.filehandles.length >= self.max_filehandles
other_filehandle = self.filehandles.pop
other_filehandle.close unless other_filehandle.closed?
end
filehandle = open_log(log_filename, {:uid => domain.uid, :gid => domain.gid, :sync => self.sync_io})
end
end
if filehandle.is_a?(File) and not filehandle.closed?
self.filehandles << filehandle
filehandle.puts(line_without_domain_name)
else
warn "#{$0}: No file handle found -- logging to default file for #{domain.inspect}" if $VERBOSE and domain.is_a?(Symbiosis::Domain)
if @default_filehandle.nil? or @default_filehandle.closed?
warn "#{$0}: Opening default log file #{self.default_filename}" if $VERBOSE
@default_filehandle = open_log(self.default_filename)
end
if @default_filehandle.is_a?(File) and not @default_filehandle.closed?
@default_filehandle.puts(line)
else
STDERR.puts line
end
end
end