Module: Slowproxy::SlowBufferedIO

Defined in:
lib/slowproxy/slow_buffered_io.rb

Constant Summary collapse

BUFSIZE =

1024 * 16

Net::BufferedIO::BUFSIZE

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.bpsObject



11
12
13
# File 'lib/slowproxy/slow_buffered_io.rb', line 11

def self.bps
  @bps ||= 128 * 1024
end

.bps=(bps) ⇒ Object



6
7
8
9
# File 'lib/slowproxy/slow_buffered_io.rb', line 6

def self.bps=(bps)
  @bps = bps
  @wait = nil
end

.loggerObject



19
20
21
# File 'lib/slowproxy/slow_buffered_io.rb', line 19

def self.logger
  @logger
end

.logger=(logger) ⇒ Object



15
16
17
# File 'lib/slowproxy/slow_buffered_io.rb', line 15

def self.logger=(logger)
  @logger = logger
end

.waitObject



23
24
25
# File 'lib/slowproxy/slow_buffered_io.rb', line 23

def self.wait
  @wait ||= 1 / ((bps / 8.0) / BUFSIZE)
end

Instance Method Details

#loggerObject



47
48
49
# File 'lib/slowproxy/slow_buffered_io.rb', line 47

def logger
  SlowBufferedIO.logger
end

#rbuf_fillObject



27
28
29
30
31
# File 'lib/slowproxy/slow_buffered_io.rb', line 27

def rbuf_fill
  logger.info "wait for read (#{SlowBufferedIO.wait}s)" if logger
  sleep SlowBufferedIO.wait
  super
end

#write0(str) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/slowproxy/slow_buffered_io.rb', line 33

def write0(str)
  if str.bytesize > BUFSIZE
    logger.info "wait for write (#{str.bytesize * 8.0 / SlowBufferedIO.bps}s)" if logger
    len = 0
    str.each_byte.each_slice(BUFSIZE) do |bytes|
      len += super(bytes.pack("C*"))
      sleep SlowBufferedIO.wait
    end
    len
  else
    super
  end
end