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.



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

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.



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

def bytes_xfer
  @bytes_xfer
end

#to_ioObject (readonly)

call nread on this



19
20
21
# File 'lib/dtas/buffer.rb', line 19

def to_io
  @to_io
end

#wrObject (readonly)

processes (sources) should redirect to this



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

def wr
  @wr
end

Class Method Details

.load(hash) ⇒ Object



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

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



41
42
43
44
# File 'lib/dtas/buffer.rb', line 41

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



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

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



78
79
80
81
82
83
# File 'lib/dtas/buffer.rb', line 78

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



73
74
75
76
# File 'lib/dtas/buffer.rb', line 73

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

#close!Object



85
86
87
88
# File 'lib/dtas/buffer.rb', line 85

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

#inflightObject



68
69
70
# File 'lib/dtas/buffer.rb', line 68

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



63
64
65
66
# File 'lib/dtas/buffer.rb', line 63

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

#to_hshObject



37
38
39
# File 'lib/dtas/buffer.rb', line 37

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