Class: Webmidi::Transport::Virtual::VirtualInputHandle
- Inherits:
-
Object
- Object
- Webmidi::Transport::Virtual::VirtualInputHandle
- Includes:
- InputHandle
- Defined in:
- lib/webmidi/transport/virtual.rb
Instance Attribute Summary collapse
-
#device_info ⇒ Object
readonly
Returns the value of attribute device_info.
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
-
#initialize(device_info, on_close: nil) ⇒ VirtualInputHandle
constructor
A new instance of VirtualInputHandle.
- #on_data(&block) ⇒ Object
- #read(timeout: nil) ⇒ Object
- #receive(bytes) ⇒ Object
Constructor Details
#initialize(device_info, on_close: nil) ⇒ VirtualInputHandle
Returns a new instance of VirtualInputHandle.
86 87 88 89 90 91 92 93 |
# File 'lib/webmidi/transport/virtual.rb', line 86 def initialize(device_info, on_close: nil) @device_info = device_info @on_close = on_close @queue = Thread::Queue.new @callbacks = [] @mutex = Mutex.new @closed = false end |
Instance Attribute Details
#device_info ⇒ Object (readonly)
Returns the value of attribute device_info.
84 85 86 |
# File 'lib/webmidi/transport/virtual.rb', line 84 def device_info @device_info end |
Instance Method Details
#close ⇒ Object
120 121 122 123 124 125 126 |
# File 'lib/webmidi/transport/virtual.rb', line 120 def close return if @closed @closed = true @queue.close @on_close&.call end |
#closed? ⇒ Boolean
128 129 130 |
# File 'lib/webmidi/transport/virtual.rb', line 128 def closed? @closed end |
#on_data(&block) ⇒ Object
109 110 111 |
# File 'lib/webmidi/transport/virtual.rb', line 109 def on_data(&block) @mutex.synchronize { @callbacks << block } end |
#read(timeout: nil) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/webmidi/transport/virtual.rb', line 95 def read(timeout: nil) return nil if @closed if timeout @queue.pop(timeout: timeout) else begin @queue.pop(true) rescue nil end end end |
#receive(bytes) ⇒ Object
113 114 115 116 117 118 |
# File 'lib/webmidi/transport/virtual.rb', line 113 def receive(bytes) return if @closed @queue.push(bytes) @mutex.synchronize { @callbacks.dup }.each { |cb| cb.call(bytes) } end |