From 3286ebf156b6feb1e99b7705f7eed48e712781f2 Mon Sep 17 00:00:00 2001 From: Aaron Cuevas Lopez <aacuelo@teleco.upv.es> Date: Mon, 9 Nov 2015 16:29:59 +0100 Subject: [PATCH] Move network record control to network events module --- .../NetworkEvents/NetworkEvents.cpp | 107 +++++++++++++++- .../Processors/NetworkEvents/NetworkEvents.h | 3 + .../RecordControl/RecordControl.cpp | 116 ------------------ .../Processors/RecordControl/RecordControl.h | 4 - 4 files changed, 108 insertions(+), 122 deletions(-) diff --git a/Source/Processors/NetworkEvents/NetworkEvents.cpp b/Source/Processors/NetworkEvents/NetworkEvents.cpp index 3f444cdca..a4ccdbdb8 100644 --- a/Source/Processors/NetworkEvents/NetworkEvents.cpp +++ b/Source/Processors/NetworkEvents/NetworkEvents.cpp @@ -409,8 +409,12 @@ String NetworkEvents::handleSpecialMessages(StringTS msg) /** Start/stop data acquisition */ String s = msg.getString(); + /** Command is first substring */ + StringArray inputs = StringArray::fromTokens(s, " "); + String cmd = String(inputs[0]); + const MessageManagerLock mmLock; - if (s.compareIgnoreCase("StartAcquisition") == 0) + if (cmd.compareIgnoreCase("StartAcquisition") == 0) { if (!CoreServices::getAcquisitionStatus()) { @@ -418,7 +422,7 @@ String NetworkEvents::handleSpecialMessages(StringTS msg) } return String("StartedAcquisition"); } - else if (s.compareIgnoreCase("StopAcquisition") == 0) + else if (cmd.compareIgnoreCase("StopAcquisition") == 0) { if (CoreServices::getAcquisitionStatus()) { @@ -426,6 +430,57 @@ String NetworkEvents::handleSpecialMessages(StringTS msg) } return String("StoppedAcquisition"); } + else if (String("StartRecord").compareIgnoreCase(cmd) == 0) + { + if (!CoreServices::getRecordingStatus() && CoreServices::getAcquisitionStatus()) + { + /** First set optional parameters (name/value pairs)*/ + if (s.contains("=")) + { + String params = s.substring(cmd.length()); + StringPairArray dict = parseNetworkMessage(params); + + StringArray keys = dict.getAllKeys(); + for (int i = 0; i<keys.size(); i++) + { + String key = keys[i]; + String value = dict[key]; + + if (key.compareIgnoreCase("CreateNewDir") == 0) + { + if (value.compareIgnoreCase("1") == 0) + { + CoreServices::createNewRecordingDir(); + } + } + else if (key.compareIgnoreCase("RecDir") == 0) + { + CoreServices::setRecordingDirectory(value); + } + else if (key.compareIgnoreCase("PrependText") == 0) + { + CoreServices::setPrependTextToRecordingDir(value); + } + else if (key.compareIgnoreCase("AppendText") == 0) + { + CoreServices::setAppendTextToRecordingDir(value); + } + } + } + + /** Start recording */ + CoreServices::setRecordingStatus(true); + return String("StartedRecording"); + } + } + else if (String("StopRecord").compareIgnoreCase(cmd) == 0) + { + if (CoreServices::getRecordingStatus()) + { + CoreServices::setRecordingStatus(false); + return String("StoppedRecording"); + } + } else { return String("NotHandled"); @@ -590,3 +645,51 @@ void NetworkEvents::createZmqContext() zmqcontext = zmq_ctx_new(); //<-- this is only available in version 3+ #endif } + +StringPairArray NetworkEvents::parseNetworkMessage(String msg) +{ + StringArray splitted; + splitted.addTokens(msg, "=", ""); + + StringPairArray dict = StringPairArray(); + String key = ""; + String value = ""; + for (int i = 0; i<splitted.size() - 1; i++) + { + String s1 = splitted[i]; + String s2 = splitted[i + 1]; + + /** Get key */ + if (!key.isEmpty()) + { + if (s1.contains(" ")) + { + int i1 = s1.lastIndexOf(" "); + key = s1.substring(i1 + 1); + } + else + { + key = s1; + } + } + else + { + key = s1.trim(); + } + + /** Get value */ + if (i < splitted.size() - 2) + { + int i1 = s2.lastIndexOf(" "); + value = s2.substring(0, i1); + } + else + { + value = s2; + } + + dict.set(key, value); + } + + return dict; +} diff --git a/Source/Processors/NetworkEvents/NetworkEvents.h b/Source/Processors/NetworkEvents/NetworkEvents.h index 2aca9ba51..bcdbb5b34 100644 --- a/Source/Processors/NetworkEvents/NetworkEvents.h +++ b/Source/Processors/NetworkEvents/NetworkEvents.h @@ -117,6 +117,9 @@ private: void handleEvent(int eventType, MidiMessage& event, int samplePos); void createZmqContext(); + //* Split network message into name/value pairs (name1=val1 name2=val2 etc) */ + StringPairArray parseNetworkMessage(String msg); + StringTS createStringTS(String S, int64 t); static void* zmqcontext; diff --git a/Source/Processors/RecordControl/RecordControl.cpp b/Source/Processors/RecordControl/RecordControl.cpp index 65a08a02c..15789ade0 100644 --- a/Source/Processors/RecordControl/RecordControl.cpp +++ b/Source/Processors/RecordControl/RecordControl.cpp @@ -111,123 +111,7 @@ void RecordControl::handleEvent(int eventType, MidiMessage& event, int) CoreServices::setRecordingStatus(!CoreServices::getRecordingStatus()); } } - else if (eventType == MESSAGE) - { - handleNetworkEvent(event); - } } -void RecordControl::handleNetworkEvent(MidiMessage& event) -{ - /** Extract network message from midi event */ - const uint8* dataptr = event.getRawData(); - int bufferSize = event.getRawDataSize(); - int len = bufferSize - 6; // 6 for initial event prefix - String msg = String((const char*)(dataptr + 6), len); - - /** Command is first substring */ - StringArray inputs = StringArray::fromTokens(msg, " "); - String cmd = String(inputs[0]); - - const MessageManagerLock mmLock; - - if (String("StartRecord").compareIgnoreCase(cmd) == 0) - { - if (!CoreServices::getRecordingStatus()) - { - /** First set optional parameters (name/value pairs)*/ - if (msg.contains("=")) - { - String s = msg.substring(cmd.length()); - StringPairArray dict = parseNetworkMessage(s); - - StringArray keys = dict.getAllKeys(); - for (int i=0; i<keys.size(); i++) - { - String key = keys[i]; - String value = dict[key]; - - if (key.compareIgnoreCase("CreateNewDir") == 0) - { - if (value.compareIgnoreCase("1") == 0) - { - CoreServices::createNewRecordingDir(); - } - } - else if (key.compareIgnoreCase("RecDir") == 0) - { - CoreServices::setRecordingDirectory(value); - } - else if (key.compareIgnoreCase("PrependText") == 0) - { - CoreServices::setPrependTextToRecordingDir(value); - } - else if (key.compareIgnoreCase("AppendText") == 0) - { - CoreServices::setAppendTextToRecordingDir(value); - } - } - } - - /** Start recording */ - CoreServices::setRecordingStatus(true); - } - } - else if (String("StopRecord").compareIgnoreCase(cmd) == 0) - { - if (CoreServices::getRecordingStatus()) - { - CoreServices::setRecordingStatus(false); - } - } -} - -StringPairArray RecordControl::parseNetworkMessage(String msg) -{ - StringArray splitted; - splitted.addTokens(msg, "=", ""); - - StringPairArray dict = StringPairArray(); - String key = ""; - String value = ""; - for (int i=0; i<splitted.size()-1; i++) - { - String s1 = splitted[i]; - String s2 = splitted[i+1]; - - /** Get key */ - if (!key.isEmpty()) - { - if (s1.contains(" ")) - { - int i1 = s1.lastIndexOf(" "); - key = s1.substring(i1+1); - } - else - { - key = s1; - } - } - else - { - key = s1.trim(); - } - - /** Get value */ - if (i < splitted.size() - 2) - { - int i1 = s2.lastIndexOf(" "); - value = s2.substring(0, i1); - } - else - { - value = s2; - } - - dict.set(key, value); - } - - return dict; -} diff --git a/Source/Processors/RecordControl/RecordControl.h b/Source/Processors/RecordControl/RecordControl.h index b43470dcc..10d0d62f3 100644 --- a/Source/Processors/RecordControl/RecordControl.h +++ b/Source/Processors/RecordControl/RecordControl.h @@ -47,10 +47,6 @@ public: void setParameter(int, float); void updateTriggerChannel(int newChannel); void handleEvent(int eventType, MidiMessage& event, int); - void handleNetworkEvent(MidiMessage& event); - - //* Split network message into name/value pairs (name1=val1 name2=val2 etc) */ - StringPairArray parseNetworkMessage(String msg); bool enable(); -- GitLab