Class: DTAS::Buffer

Inherits:
Object
  • Object
show all
Defined in:
lib/dtas/buffer.rb

Overview

pipe buffer management for -player

Defined Under Namespace

Modules: ReadWrite, Splice

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBuffer

Returns a new instance of Buffer.


25
26
27
28
29
# File 'lib/dtas/buffer.rb', line 25

def initialize
  @bytes_xfer = 0
  @buffer_size = nil
  @to_io, @wr = DTAS::Pipe.new
end

Instance Attribute Details

#bytes_xferObject

Returns the value of attribute bytes_xfer.


23
24
25
# File 'lib/dtas/buffer.rb', line 23

def bytes_xfer
  @bytes_xfer
end

#to_ioObject (readonly)

call nread on this


21
22
23
# File 'lib/dtas/buffer.rb', line 21

def to_io
  @to_io
end

#wrObject (readonly)

processes (sources) should redirect to this


22
23
24
# File 'lib/dtas/buffer.rb', line 22

def wr
  @wr
end

Class Method Details

.load(hash) ⇒ Object


31
32
33
34
35
36
37
# File 'lib/dtas/buffer.rb', line 31

def self.load(hash)
  buf = new
  if hash
    bs = hash["buffer_size"] and buf.buffer_size = bs
  end
  buf
end

Instance Method Details

#__dst_error(dst, e) ⇒ Object


43
44
45
46
# File 'lib/dtas/buffer.rb', line 43

def __dst_error(dst, e)
  warn "dropping #{dst.inspect} due to error: #{e.message} (#{e.class})"
  dst.close unless dst.closed?
end

#broadcast(targets, limit = nil) ⇒ Object

This will modify targets returns one of:

  • :wait_readable

  • subset of targets array for :wait_writable

  • some type of StandardError

  • nil


54
55
56
57
58
59
60
61
62
63
# File 'lib/dtas/buffer.rb', line 54

def broadcast(targets, limit = nil)
  case targets.size
  when 0
    :ignore # this will pause decoders
  when 1
    broadcast_one(targets, limit)
  else # infinity
    broadcast_inf(targets, limit)
  end
end

#buf_resetObject


80
81
82
83
84
85
# File 'lib/dtas/buffer.rb', line 80

def buf_reset
  close!
  @bytes_xfer = 0
  @to_io, @wr = DTAS::Pipe.new
  @wr.pipe_size = @buffer_size if @buffer_size
end

#closeObject

don't really close the pipes under normal circumstances, just clear data


75
76
77
78
# File 'lib/dtas/buffer.rb', line 75

def close
  bytes = inflight
  discard(bytes) if bytes > 0
end

#close!Object


87
88
89
90
# File 'lib/dtas/buffer.rb', line 87

def close!
  @to_io.close
  @wr.close
end

#inflightObject


70
71
72
# File 'lib/dtas/buffer.rb', line 70

def inflight
  @to_io.nread
end

#readable_iter {|_self, nil| ... } ⇒ Object

Yields:

  • (_self, nil)

Yield Parameters:

  • _self (DTAS::Buffer)

    the object that the method was called on


65
66
67
68
# File 'lib/dtas/buffer.rb', line 65

def readable_iter
  # this calls DTAS::Buffer#broadcast from DTAS::Player
  yield(self, nil)
end

#to_hshObject


39
40
41
# File 'lib/dtas/buffer.rb', line 39

def to_hsh
  @buffer_size ? { "buffer_size" => @buffer_size } : {}
end