def peer_info
@peers.map do |p|
next nil unless p.running?
{:name => p.name, :seed => p.peer_complete?,
:dlamt => p.dlamt, :ulamt => p.ulamt,
:dlrate => p.dlrate, :ulrate => p.ulrate,
:pending_send => p.pending_send, :pending_recv => p.pending_recv,
:interested => p.interested?, :peer_interested => p.peer_interested?,
:choking => p.choking?, :peer_choking => p.peer_choking?,
:snubbing => p.snubbing?,
:we_desire => @package.pieces.inject(0) do |s, piece|
s + (!piece.complete? && p.piece_available?(piece.index) ? 1 : 0)
end,
:they_desire => @package.pieces.inject(0) do |s, piece|
s + (piece.complete? && !p.piece_available?(piece.index) ? 1 : 0)
end,
:start_time => p.start_time
}
end.compact
end