Module: Webmidi::Transport

Defined in:
lib/webmidi/transport.rb,
lib/webmidi/transport/base.rb,
lib/webmidi/transport/null.rb,
lib/webmidi/transport/adapter.rb,
lib/webmidi/transport/virtual.rb,
lib/webmidi/transport/device_info.rb

Defined Under Namespace

Modules: Adapter, InputHandle, OutputHandle Classes: Base, DeviceInfo, Null, Virtual

Class Method Summary collapse

Class Method Details

.auto_detect(transport: Webmidi.configuration.transport, fallback_transport: Webmidi.configuration.fallback_transport, candidates: default_candidates) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/webmidi/transport.rb', line 42

def auto_detect(transport: Webmidi.configuration.transport,
  fallback_transport: Webmidi.configuration.fallback_transport,
  candidates: default_candidates)
  return resolve_transport!(transport) unless transport == :auto

  detected = candidates.find { |candidate| candidate.respond_to?(:available?) && candidate.available? }
  detected || resolve_transport!(fallback_transport)
end

.load_adapter(name, require_path: Adapter.require_path(name), constant: Adapter.constant_name(name)) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/webmidi/transport.rb', line 33

def load_adapter(name, require_path: Adapter.require_path(name), constant: Adapter.constant_name(name))
  require require_path if require_path
  register(Adapter.constantize(constant))
rescue LoadError => e
  raise TransportNotAvailableError, "Could not load #{Adapter.gem_name(name)}: #{e.message}"
rescue NameError => e
  raise TransportNotAvailableError, "Could not find transport adapter #{constant}: #{e.message}"
end

.register(transport) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/webmidi/transport.rb', line 16

def register(transport)
  Adapter.validate!(transport)
  @registry_mutex.synchronize do
    @registered_transports << transport unless @registered_transports.include?(transport)
  end
  transport
end

.registeredObject



29
30
31
# File 'lib/webmidi/transport.rb', line 29

def registered
  @registry_mutex.synchronize { @registered_transports.dup.freeze }
end

.unregister(transport) ⇒ Object



24
25
26
27
# File 'lib/webmidi/transport.rb', line 24

def unregister(transport)
  @registry_mutex.synchronize { @registered_transports.delete(transport) }
  transport
end