Class: Webmidi::Transport::Virtual::VirtualOutputHandle

Inherits:
Object
  • Object
show all
Includes:
OutputHandle
Defined in:
lib/webmidi/transport/virtual.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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_infoObject (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

#closeObject



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

Returns:

  • (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_messagesObject



167
168
169
# File 'lib/webmidi/transport/virtual.rb', line 167

def sent_messages
  @mutex.synchronize { @sent_messages.dup }
end

#write(bytes) ⇒ Object

Raises:



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