torrenter 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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