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