Class: Webmidi::Transport::Virtual::VirtualOutputHandle
- Inherits:
-
Object
- Object
- Webmidi::Transport::Virtual::VirtualOutputHandle
- Includes:
- OutputHandle
- 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
- #connect(input_handle) ⇒ Object
- #disconnect(input_handle) ⇒ Object
-
#initialize(device_info, on_close: nil) ⇒ VirtualOutputHandle
constructor
A new instance of VirtualOutputHandle.
- #sent_messages ⇒ Object
- #write(bytes) ⇒ Object
Constructor Details
#initialize(device_info, on_close: nil) ⇒ VirtualOutputHandle
Returns a new instance of VirtualOutputHandle.
138 139 140 141 142 143 144 145 |
# File 'lib/webmidi/transport/virtual.rb', line 138 def initialize(device_info, on_close: nil) @device_info = device_info @on_close = on_close @connected_inputs = [] @mutex = Mutex.new @closed = false @sent_messages = [] end |
Instance Attribute Details
#device_info ⇒ Object (readonly)
Returns the value of attribute device_info.
136 137 138 |
# File 'lib/webmidi/transport/virtual.rb', line 136 def device_info @device_info end |
Instance Method Details
#close ⇒ Object
171 172 173 174 175 176 |
# File 'lib/webmidi/transport/virtual.rb', line 171 def close return if @closed @closed = true @on_close&.call end |
#closed? ⇒ Boolean
178 179 180 |
# File 'lib/webmidi/transport/virtual.rb', line 178 def closed? @closed end |
#connect(input_handle) ⇒ Object
157 158 159 160 161 |
# File 'lib/webmidi/transport/virtual.rb', line 157 def connect(input_handle) @mutex.synchronize do @connected_inputs << input_handle unless @connected_inputs.include?(input_handle) end end |
#disconnect(input_handle) ⇒ Object
163 164 165 |
# File 'lib/webmidi/transport/virtual.rb', line 163 def disconnect(input_handle) @mutex.synchronize { @connected_inputs.delete(input_handle) } end |
#sent_messages ⇒ Object
167 168 169 |
# File 'lib/webmidi/transport/virtual.rb', line 167 def @mutex.synchronize { @sent_messages.dup } end |
#write(bytes) ⇒ Object
147 148 149 150 151 152 153 154 155 |
# File 'lib/webmidi/transport/virtual.rb', line 147 def write(bytes) raise PortClosedError, "Port is closed" if @closed connected_inputs = @mutex.synchronize do @sent_messages << bytes @connected_inputs.dup end connected_inputs.each { |input| input.receive(bytes) } end |