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.
138 139 140 141 |
# File 'lib/transfer.rb', line 138 def initialize(host, port, logging = false) super(host, port) @logging = logging end |
Class Method Details
.buffer(data) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/transfer.rb', line 143 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
155 156 157 158 159 160 161 |
# File 'lib/transfer.rb', line 155 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
167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/transfer.rb', line 167 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
191 192 193 |
# File 'lib/transfer.rb', line 191 def scan_directory(directory_name) return Dir["%s/**/*" % directory_name] end |
#send_chunk(chunk) ⇒ Object
163 164 165 |
# File 'lib/transfer.rb', line 163 def send_chunk(chunk) send(chunk, @@chunk_size) end |
#send_directory(directory) ⇒ Object
195 196 197 198 199 200 201 |
# File 'lib/transfer.rb', line 195 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
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/transfer.rb', line 179 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 |