Class: Webmidi::Port::Base
- Inherits:
-
Object
- Object
- Webmidi::Port::Base
- Defined in:
- lib/webmidi/port/base.rb
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#manufacturer ⇒ Object
readonly
Returns the value of attribute manufacturer.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #close ⇒ Object
- #connected? ⇒ Boolean
- #connection ⇒ Object
- #disconnect ⇒ Object
-
#initialize(id:, name:, manufacturer:, version:, type:, transport_handle:, sysex_enabled: false) ⇒ Base
constructor
A new instance of Base.
- #on_state_change(&block) ⇒ Object
- #open ⇒ Object
- #open? ⇒ Boolean
- #state ⇒ Object
- #sysex_enabled? ⇒ Boolean
Constructor Details
#initialize(id:, name:, manufacturer:, version:, type:, transport_handle:, sysex_enabled: false) ⇒ Base
Returns a new instance of Base.
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/webmidi/port/base.rb', line 10 def initialize(id:, name:, manufacturer:, version:, type:, transport_handle:, sysex_enabled: false) @id = id @name = name @manufacturer = manufacturer @version = version @type = type @transport_handle = transport_handle @sysex_enabled = sysex_enabled @state = :connected @connection = :closed @state_change_callbacks = [] @mutex = Mutex.new end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
8 9 10 |
# File 'lib/webmidi/port/base.rb', line 8 def id @id end |
#manufacturer ⇒ Object (readonly)
Returns the value of attribute manufacturer.
8 9 10 |
# File 'lib/webmidi/port/base.rb', line 8 def manufacturer @manufacturer end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
8 9 10 |
# File 'lib/webmidi/port/base.rb', line 8 def name @name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
8 9 10 |
# File 'lib/webmidi/port/base.rb', line 8 def type @type end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
8 9 10 |
# File 'lib/webmidi/port/base.rb', line 8 def version @version end |
Instance Method Details
#close ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/webmidi/port/base.rb', line 48 def close callbacks = @mutex.synchronize do was_open = @connection == :open @connection = :closed was_open ? @state_change_callbacks.dup : [] end callbacks.each { |cb| cb.call(self) } self end |
#connected? ⇒ Boolean
62 63 64 |
# File 'lib/webmidi/port/base.rb', line 62 def connected? state == :connected end |
#connection ⇒ Object
32 33 34 |
# File 'lib/webmidi/port/base.rb', line 32 def connection @mutex.synchronize { @connection } end |
#disconnect ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/webmidi/port/base.rb', line 75 def disconnect callbacks = @mutex.synchronize do return self if @state == :disconnected @state = :disconnected @connection = :closed @transport_handle&.close @state_change_callbacks.dup end callbacks.each { |cb| cb.call(self) } self end |
#on_state_change(&block) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/webmidi/port/base.rb', line 66 def on_state_change(&block) raise ArgumentError, "on_state_change requires a block" unless block @mutex.synchronize { @state_change_callbacks << block } CallbackSubscription.new do @mutex.synchronize { @state_change_callbacks.delete(block) } end end |
#open ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/webmidi/port/base.rb', line 36 def open callbacks = @mutex.synchronize do raise PortClosedError, "Port is disconnected" if @state == :disconnected return self if @connection == :open @connection = :open @state_change_callbacks.dup end callbacks.each { |cb| cb.call(self) } self end |
#open? ⇒ Boolean
58 59 60 |
# File 'lib/webmidi/port/base.rb', line 58 def open? connection == :open end |
#state ⇒ Object
28 29 30 |
# File 'lib/webmidi/port/base.rb', line 28 def state @mutex.synchronize { @state } end |
#sysex_enabled? ⇒ Boolean
24 25 26 |
# File 'lib/webmidi/port/base.rb', line 24 def sysex_enabled? @mutex.synchronize { @sysex_enabled } end |