def body(stream = block_given?)
return current_body unless block_given? or stream
return yield(current_body) unless stream and job.pending?
number = 0
session.listen(self) do |listener|
listener.on 'job:log' do |event|
next unless event.payload['number'] > number
number = event.payload['number']
yield event.payload['_log']
listener.disconnect if event.payload['final']
end
listener.on 'job:finished' do |event|
listener.disconnect
end
listener.on_connect do
data = session.get_raw("/logs/#{id}", nil, "Accept" => CHUNKED)['log']
if data['parts']
data['parts'].each { |p| yield p['content'] }
number = data['parts'].last['number'] if data['parts'].any?
else
yield data['body']
listener.disconnect
end
end
end
end