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.
137 138 139 140 |
# File 'lib/transfer.rb', line 137 def initialize(host, port, logging = false) super(host, port) @logging = logging end |
Class Method Details
.buffer(data) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/transfer.rb', line 142 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
154 155 156 157 158 159 160 |
# File 'lib/transfer.rb', line 154 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
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/transfer.rb', line 166 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
190 191 192 |
# File 'lib/transfer.rb', line 190 def scan_directory(directory_name) return Dir["%s/**/*" % directory_name] end |
#send_chunk(chunk) ⇒ Object
162 163 164 |
# File 'lib/transfer.rb', line 162 def send_chunk(chunk) write(chunk) end |
#send_directory(directory) ⇒ Object
194 195 196 197 198 199 200 |
# File 'lib/transfer.rb', line 194 def send_directory(directory) scan_directory(directory).each do |f| if File.directory?(f) send_directory(f) else send_file(f) end end end |
#send_file(filename) ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/transfer.rb', line 178 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 |