src/JackCommand.h
branchv_0
changeset 2 e5f0d3f92eb4
parent 1 001b956610ca
child 3 0222c20f590f
--- a/src/JackCommand.h	Mon May 18 18:04:12 2020 +0200
+++ b/src/JackCommand.h	Mon May 18 22:00:20 2020 +0200
@@ -23,6 +23,7 @@
 #include <pthread.h>
 #include <sys/mman.h>
 #include <atomic>
+#include <functional>
 
 #include <jack/jack.h>
 #include <jack/midiport.h>
@@ -61,7 +62,7 @@
 		uint32_t size;
 		uint32_t time;
 	};
-
+	
 public:
 
 	int enqueueMessage(jack_nframes_t frames) {
@@ -137,9 +138,8 @@
 		continueProcessing = false;
 	}
 
-	void processJackStream(ostream &output) {
+	void processJackStream(std::shared_ptr<writer::RelationalWriter> writer, std::function<void() > relationalWriterFlush) {
 		// Relation headers:
-		std::shared_ptr<RelationalWriter> writer(Factory::create(output));
 		vector<AttributeMetadata> metadata;
 		metadata.push_back({L"event", TypeId::STRING});
 		metadata.push_back({L"channel", TypeId::INTEGER});
@@ -149,7 +149,7 @@
 		metadata.push_back({L"controller_id", TypeId::INTEGER});
 		metadata.push_back({L"controller_value", TypeId::INTEGER});
 		writer->startRelation(L"midi", metadata, true);
-		output.flush();
+		relationalWriterFlush();
 
 		// Initialize JACK connection:
 		std::string clientName = "relpipe-in-jack";
@@ -177,7 +177,7 @@
 				MidiMessage m;
 				jack_ringbuffer_read(ringBuffer, (char*) &m, sizeof (MidiMessage));
 				processMessage(writer, &m);
-				output.flush();
+				relationalWriterFlush();
 			}
 			pthread_cond_wait(&dataReady, &messageThreadLock);
 		}