Class: SimpleTransfer::Sender
- Inherits:
-
TCPSocket
- Object
- TCPSocket
- SimpleTransfer::Sender
- Defined in:
- lib/transfer.rb
Constant Summary collapse
- @@chunk_size =
5000
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(host, port, logging = false) ⇒ Sender
constructor
A new instance of Sender.
- #initiate_exchange(package) ⇒ Object
- #scan_directory(directory_name) ⇒ Object
- #send_chunk(chunk) ⇒ Object
- #send_directory(directory) ⇒ Object
- #send_file(filename) ⇒ Object
Constructor Details
#initialize(host, port, logging = false) ⇒ Sender
Returns a new instance of Sender.
129 130 131 132 |
# File 'lib/transfer.rb', line 129 def initialize(host, port, logging = false) super(host, port) @logging = logging end |
Class Method Details
.buffer(data) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/transfer.rb', line 134 def self.buffer(data) buffers = Array.new data = String(data) buffer_amount = @@chunk_size > data.length ? 1 : data.length / @@chunk_size + 1 for i in 0..buffer_amount - 1 buffers.push data.slice(i * @@chunk_size, @@chunk_size) end return buffers end |
.pack(filename, data) ⇒ Object
146 147 148 149 150 151 152 |
# File 'lib/transfer.rb', line 146 def self.pack(filename, data) buffers = self.buffer(data) buffers.unshift filename buffers.unshift String(data.length) return buffers end |
Instance Method Details
#initiate_exchange(package) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/transfer.rb', line 158 def initiate_exchange(package) send_chunk("SYNC NOW") log_transfer("sent start sign: SYNC NOW", level = "DEBUGGING") if @logging recv(1024) send_chunk(package.shift) log_transfer("sent data length", level = "DEBUGGING") if @logging recv(1024) send_chunk(package.shift) log_transfer("sent filename", level = "DEBUGGING") if @logging recv(1024) end |
#scan_directory(directory_name) ⇒ Object
182 183 184 |
# File 'lib/transfer.rb', line 182 def scan_directory(directory_name) return Dir["%s/**/*" % directory_name] end |
#send_chunk(chunk) ⇒ Object
154 155 156 |
# File 'lib/transfer.rb', line 154 def send_chunk(chunk) send(chunk, @@chunk_size) end |
#send_directory(directory) ⇒ Object
186 187 188 189 190 191 192 193 194 |
# File 'lib/transfer.rb', line 186 def send_directory(directory) scan_directory(directory).each do |f| #sleep because there is no sync for end of transfer sleep 0.5 if File.directory?(f) send_directory(f) else send_file(f) end end end |
#send_file(filename) ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/transfer.rb', line 170 def send_file(filename) package = nil File.open(filename, "rb") do |f| log_transfer("sending #{f.path}") if @logging package = Sender.pack(filename, f.read()) end initiate_exchange(package) package.each do |chunk| send_chunk(chunk) end end |