summaryrefslogtreecommitdiffstats
path: root/classes/MIDIStateManager.sc
diff options
context:
space:
mode:
authorDavid Runge <dave@sleepmap.de>2018-03-18 00:57:06 +0100
committerDavid Runge <dave@sleepmap.de>2018-03-18 00:57:06 +0100
commit6a213f643bcee208afe6f1808e7ce4b634e39852 (patch)
tree44f738a741ab1dd3fd4df01522455cff0facecf4 /classes/MIDIStateManager.sc
parent755cc2bc11e9c571c08df809935b68c5f4cf6652 (diff)
downloadusbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.gz
usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.bz2
usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.xz
usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.zip
Adding classes/MIDIState{,Manager}.sc, taking care of early stages of state management.
Making constructors more readable. Adding MIDIStateManager to USBMIDIIsm. Creating/recycling states for new and re-recognized MIDI devices.
Diffstat (limited to 'classes/MIDIStateManager.sc')
-rw-r--r--classes/MIDIStateManager.sc41
1 files changed, 41 insertions, 0 deletions
diff --git a/classes/MIDIStateManager.sc b/classes/MIDIStateManager.sc
new file mode 100644
index 0000000..ec4b53c
--- /dev/null
+++ b/classes/MIDIStateManager.sc
@@ -0,0 +1,41 @@
+MIDIStateManager{
+
+ var <deviceStates;
+
+ *new{
+ ^super.new.initManager();
+ }
+
+ initManager{
+ deviceStates = Array();
+ }
+
+ // request a state
+ // if a stored and unconnected state is available return that, else return a
+ // new MIDIState
+ requestState{
+ arg name, uid, inPortNum, outPortNum;
+ var devicePosition = -1, stateAvailable = false;
+ deviceStates.do({|storedDevice, i|
+ if((name == storedDevice.name) && (storedDevice.connected.not),{
+ stateAvailable = true;
+ devicePosition = i;
+ });
+ });
+ if(stateAvailable && (devicePosition >= 0),{
+ deviceStates[devicePosition].connected=true;
+ ^deviceStates[devicePosition];
+ },{
+ deviceStates = deviceStates.add(
+ MIDIState.new(name, uid, inPortNum, outPortNum)
+ );
+ ^deviceStates[deviceStates.size-1];
+ });
+ }
+
+ listStates{
+ deviceStates.do({|state, i|
+ postln(i.asString++": ["++state.name++", "++state.uid++", "++state.inPortNum++", "++state.outPortNum++", "++state.connected++"]");
+ });
+ }
+}