torrenter 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3234eb20fcd3339fcecb2a52c4bfe3bdb0f84ee5
4
- data.tar.gz: 88f9959f5111cb4c8bbc082a42a8bd7897b5c95a
3
+ metadata.gz: d0c2b67a7d7f4f57dcf57fd67990b0faf6fe2817
4
+ data.tar.gz: 17efbbf5c9c17387bda7daf6bc735c59c54653bf
5
5
  SHA512:
6
- metadata.gz: ecb115dd277b70cd8769f2300d016b714042777be8665852fabe64f6c45a5bce5cab063b3ba97ad8625bc8eb3361401a63c30bae9e4e3508cc8f17c9a9f16546
7
- data.tar.gz: e5a295b9a04b632801c3560fea6b2ce312830364fdfd06255bae7e3b649c040c160e5cb9ec06d4963ba33ded91e531e53ef71811d9f99da0fa344ffbfa0d459f
6
+ metadata.gz: 0f9aa55935462a0354d28090b54250386358f31c8ccbc382e187a6ab6e4e31eeccb59e169a1330fa258a8f5fc13c4052358709c4886367b52a3ea87c29bfe70f
7
+ data.tar.gz: a3d9d9011aa5211fcd41fa8db189b85331b12792859628134b869dd5bbe32364ac8e9f93f8898d2d8bbdbaa7234713087cd55cbfb31e724b823409a784d13f65
@@ -2,9 +2,11 @@ require 'socket'
2
2
  require 'digest/sha1'
3
3
  require 'bencode'
4
4
  require 'fileutils'
5
+ require 'json'
5
6
  require 'torrenter/constants'
6
7
  require 'torrenter/peer'
7
8
  require 'torrenter/peer/buffer_state'
9
+ require 'torrenter/peer/seed'
8
10
  require 'torrenter/reactor'
9
11
  require 'torrenter/tracker'
10
12
  require 'torrenter/tracker/http_tracker'
@@ -14,6 +16,7 @@ require 'torrenter/torrent_reader/piece'
14
16
  require 'torrenter/torrent_reader/piece_index'
15
17
  require 'torrenter/torrent_reader/piece_constructor'
16
18
  require 'torrenter/version'
19
+ require 'pry'
17
20
 
18
21
  module Torrenter
19
22
  class Torrent
@@ -117,7 +117,11 @@ module Torrenter
117
117
  end
118
118
 
119
119
  def send(msg)
120
- @socket.sendmsg_nonblock(msg)
120
+ begin
121
+ @socket.sendmsg_nonblock(msg)
122
+ rescue *EXCEPTIONS
123
+ @socket.close
124
+ end
121
125
  end
122
126
 
123
127
  def recv(bytes=BLOCK)
@@ -0,0 +1,18 @@
1
+ module Torrenter
2
+ class Peer
3
+ class Seed
4
+ def initialize
5
+ @server = TCPServer.new(6881)
6
+ end
7
+
8
+ def server_loop
9
+ begin
10
+ Thread.start(@server.accept_nonblock) do |client|
11
+ binding.pry if client
12
+ end
13
+ rescue IO::EAGAINWaitReadable
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -12,7 +12,7 @@ module Torrenter
12
12
 
13
13
  def message_reactor
14
14
  @piece_index.verify_status
15
- @peers.each { |peer| peer.connect }
15
+ @peers.each { |peer| peer.connect unless active_peers.size > 5 }
16
16
  puts "You are now connected to #{active_peers.size} peers."
17
17
  loop do
18
18
  break if finished?
@@ -20,7 +20,7 @@ module Torrenter
20
20
  if peer.peer_state
21
21
  peer.connection_state(@piece_index, have)
22
22
  else
23
- peer.connect if Time.now.to_i % 60 == 0
23
+ peer.connect if Time.now.to_i % ((active_peers.size * 10) + 1) == 0
24
24
  end
25
25
  end
26
26
  @piece_index.clean_peers
@@ -28,6 +28,9 @@ module Torrenter
28
28
  end
29
29
  end
30
30
 
31
+ def server_listen
32
+ end
33
+
31
34
  def have
32
35
  ->(index, peer) { @piece_index[index].add_peer(peer) }
33
36
  end
@@ -89,16 +89,18 @@ module Torrenter
89
89
  }
90
90
  end
91
91
 
92
- def connect_trackers
92
+ def trackers
93
93
  url_list.compact.map do |url|
94
- tracker = if url.include?('http://')
94
+ if url.include?('http://')
95
95
  Tracker::HTTPTracker.new(url, tracker_params)
96
96
  else
97
97
  Tracker::UDPTracker.new(url, tracker_params)
98
98
  end
99
-
100
- tracker.connect
101
99
  end
102
100
  end
101
+
102
+ def connect_trackers
103
+ trackers.map { |tracker| tracker.connect }
104
+ end
103
105
  end
104
106
  end
@@ -9,21 +9,12 @@ module Torrenter
9
9
  @sha_hashes = sha_hashes
10
10
  @piece_length = piece_length
11
11
  @index = PieceIndex.new(piece_length)
12
- @excess_bytes = 0
13
12
  end
14
13
 
15
14
  def index_length
16
15
  @sha_hashes.size / 20
17
16
  end
18
17
 
19
- def correct?
20
- total_left == @arr.map { |x| x.tally }.inject { |x,y| x + y }
21
- end
22
-
23
- def total_left
24
- @files.map { |f| f['length']}.inject { |x,y| x + y }
25
- end
26
-
27
18
  def final_piece?
28
19
  index_length == @index.size + 1
29
20
  end
@@ -59,10 +59,6 @@ module Torrenter
59
59
  @piece_index.size
60
60
  end
61
61
 
62
- def length
63
- @piece_index.length
64
- end
65
-
66
62
  def [](index)
67
63
  @piece_index[index]
68
64
  end
@@ -71,10 +67,6 @@ module Torrenter
71
67
  @piece_index[i] = Piece.new(i, piece_length, val)
72
68
  end
73
69
 
74
- def push(val)
75
- @piece_index[size] = val
76
- end
77
-
78
70
  def last
79
71
  @piece_index.last
80
72
  end
@@ -1,3 +1,3 @@
1
1
  module Torrenter
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torrenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - wismer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-08 00:00:00.000000000 Z
11
+ date: 2014-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: BitTorrent Client written in Ruby
14
14
  email:
@@ -23,6 +23,7 @@ files:
23
23
  - lib/torrenter/constants.rb
24
24
  - lib/torrenter/peer.rb
25
25
  - lib/torrenter/peer/buffer_state.rb
26
+ - lib/torrenter/peer/seed.rb
26
27
  - lib/torrenter/reactor.rb
27
28
  - lib/torrenter/torrent_reader.rb
28
29
  - lib/torrenter/torrent_reader/piece.rb