fiverr_copy 0.0.12 → 0.0.13

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.
data/bin/fiverr_copy CHANGED
@@ -35,6 +35,16 @@ optparse = OptionParser.new do |opts|
35
35
  options[:next_hop] = next_hop
36
36
  end
37
37
 
38
+ options[:filename] = "fiverr_copy_compressed_#{Time.now}.tgz"
39
+ opts.on( '-f', '--filename FILENAME', 'Specify filename' ) do |filename|
40
+ options[:filename] = filename
41
+ end
42
+
43
+ options[:chunk_size] = 1024
44
+ opts.on( '-w', '--chunk CHUNK_SIZE', 'specify chunk size' ) do |chunk_size|
45
+ options[:chunk_size] = chunk_size
46
+ end
47
+
38
48
  # This displays the help screen, all programs are
39
49
  # assumed to have this option.
40
50
  opts.on( '-h', '--help', 'Display this screen' ) do
@@ -55,6 +65,6 @@ if options[:mode] == :server
55
65
  FiverrCopy::Server.run!
56
66
  end
57
67
  else
58
- FiverrCopy::Client.run!(options[:port], options[:next_hop])
68
+ FiverrCopy::Client.run!(options[:port], options[:next_hop], options[:filename], options[:chunk_size])
59
69
  end
60
70
 
@@ -41,39 +41,37 @@ class FiverrCopy::Client
41
41
  end
42
42
 
43
43
 
44
- def self.run!(port, next_client)
44
+ def self.run!(port, next_client, filename, chunk)
45
+ puts "FiverrCopy client initializing"
45
46
  server = TCPServer.new(port)
47
+
48
+ session = server.accept
49
+
46
50
  client_session = nil
47
51
  if !(next_client.nil?)
48
- puts "Next: #{next_client}"
52
+ puts "Connecting to next hop at #{next_client}:#{port}"
49
53
  client_session = TCPSocket.new(next_client, port)
50
54
  else
51
- puts "I'm last!"
55
+ puts "Last hop mode"
52
56
  end
53
57
 
54
- @real_file_name = ""
55
58
  temp_file = Tempfile.new("fiverr_copy_#{Time.now.to_i}.tgz")
56
59
  Tempfile.open(temp_file) do |f|
57
- while (session = server.accept)
58
- Thread.start do
59
- ## I want to be sure to output something on the server side
60
- ## to show that there has been a connection
61
- puts "log: Connection from #{session.peeraddr[2]} at #{session.peeraddr[3]}"
60
+ Thread.start do
61
+ while (stream = session.read(chunk)) do
62
+
63
+ puts "Connection from #{session.peeraddr[2]} at #{session.peeraddr[3]}"
64
+
62
65
 
63
- stream = session.gets
66
+ puts "Got #{stream.size} bytes"
67
+ f.write stream
64
68
 
65
- if (stream.slice(0...8) == "FILENAME")
66
- @real_file_name = stream.chomp.split(":").last
67
- puts "log: Recieving #{@real_file_name}"
68
- else
69
- puts "log: got #{stream.size} bytes"
70
- f.write stream
71
- end
72
- client_session.puts(stream) if !(next_client.nil?)
69
+ client_session.write(stream) if !(next_client.nil?)
73
70
  session.puts "OK:#{stream.size}"
74
- end #end thread conversation
75
- end #end loop
71
+ end
72
+ end #end thread conversation
76
73
  end
77
- FileUtils.mv(temp_file, "#{Dir.pwd}/#{@real_file_name}")
74
+ puts "Done."
75
+ FileUtils.mv(temp_file, "#{Dir.pwd}/#{filename}")
78
76
  end
79
77
  end
@@ -14,6 +14,8 @@ class FiverrCopy::Server
14
14
  threads = []
15
15
  files_to_sync = Dir[self.recipe.filter]
16
16
 
17
+ compressed_file_name = "fiverr_copy_compressed_#{Time.now.to_i}.tgz"
18
+
17
19
  if !(self.recipe.manual_client_activation?)
18
20
  self.recipe.initialized_clients.each do |client|
19
21
  threads << Thread.new(client) do |current_client|
@@ -22,22 +24,22 @@ class FiverrCopy::Server
22
24
  Net::SSH.start(current_client.client_ip, current_client.username) do |ssh|
23
25
  ssh.exec("killall fiverr_copy")
24
26
  next_client = "--nexthop #{current_client.next_client}" if current_client.next_client
25
- puts "Running: fiverr_copy --client --port #{self.recipe.port} #{next_client} @ #{current_client.client_ip}"
26
- ssh.exec("fiverr_copy --client --port #{self.recipe.port} #{next_client} \&")
27
+ puts "#{current_client}: fiverr_copy --client --port #{self.recipe.port} --filename #{compressed_file_name} --chunk #{self.recipe.chunk_size} #{next_client} \&"
28
+ ssh.exec("fiverr_copy --client --port #{self.recipe.port} --filename #{compressed_file_name} --chunk #{self.recipe.chunk_size} #{next_client} \&")
27
29
  end
28
30
  end
29
31
  sleep 10
30
32
  end
31
33
  end
32
34
 
33
- compressed_file_name = "fiverr_copy_compressed_#{Time.now.to_i}"
35
+
34
36
 
35
37
  attempts = 1
36
38
  begin
37
39
  puts "Attempting Connection to #{self.recipe.initialized_clients.first.client_ip}:#{self.recipe.port}"
38
40
  client_session = TCPSocket.new(self.recipe.initialized_clients.first.client_ip, self.recipe.port)
39
- puts "Compressing: tar cvzf #{compressed_file_name}.tgz #{self.recipe.filter}"
40
- `tar cvzf #{compressed_file_name}.tgz #{self.recipe.filter}`
41
+ puts "Compressing: tar cvzf #{compressed_file_name} #{self.recipe.filter}"
42
+ `tar cvzf #{compressed_file_name} #{self.recipe.filter}`
41
43
  rescue Errno::ECONNREFUSED => e
42
44
  if attempts < 10
43
45
  attempts += 1
@@ -51,7 +53,7 @@ class FiverrCopy::Server
51
53
  end
52
54
 
53
55
  puts "Validating Compressed file"
54
- if !(FileTest.exists?("#{compressed_file_name}.tgz"))
56
+ if !(FileTest.exists?("#{compressed_file_name}"))
55
57
  puts "Could not find the compressed file to transfer:"
56
58
  puts `ls *.tgz`
57
59
  puts "exiting"
@@ -60,13 +62,14 @@ class FiverrCopy::Server
60
62
 
61
63
  puts "Transmitting..."
62
64
 
63
- File.open("#{compressed_file_name}.tgz") do |transmitted_file|
64
- client_session.puts "FILENAME:#{"#{compressed_file_name}.tgz"}"
65
+ File.open("#{compressed_file_name}") do |transmitted_file|
66
+ client_session.puts "FILENAME:#{"#{compressed_file_name}"}"
65
67
  puts "Transmitting #{transmitted_file.to_s} (#{File.size(transmitted_file)})"
66
- while (buffer = transmitted_file.read(self.recipe.chunk_size)) do
68
+ while !(client_session.closed?) && (client_response = client_session.gets) && (buffer = transmitted_file.read(self.recipe.chunk_size)) do
67
69
  puts "Sending #{buffer.size}B"
68
- client_session.write buffer
70
+ client_session.puts buffer
69
71
  end
72
+ puts "Done!"
70
73
  end
71
74
 
72
75
  end
@@ -1,3 +1,3 @@
1
1
  module FiverrCopy
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.13"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fiverr_copy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 12
10
- version: 0.0.12
9
+ - 13
10
+ version: 0.0.13
11
11
  platform: ruby
12
12
  authors:
13
13
  - Elad Meidar