diff --git a/breadcrumbs/CMakeLists.txt b/breadcrumbs/CMakeLists.txt
index 6bb4a44..a0f40dd 100644
--- a/breadcrumbs/CMakeLists.txt
+++ b/breadcrumbs/CMakeLists.txt
@@ -50,6 +50,7 @@ include_directories("${CMAKE_SOURCE_DIR}")
# puts all .cpp files inside src to the SOURCES variable
# TODO: replace this with a script for collecting cpp files
file(GLOB_RECURSE ALGOS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/algos/*.cpp")
+file(GLOB_RECURSE IO_PROCS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/io_procs/*.cpp")
file(GLOB_RECURSE COMMS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/comms/*.cpp")
file(GLOB_RECURSE CONFIG CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/config/*.cpp")
file(GLOB_RECURSE LOG CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/logging/*.cpp")
@@ -62,6 +63,6 @@ file(GLOB EXECS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/main/*.cpp")
foreach(X IN LISTS EXECS)
get_filename_component(N ${X} NAME_WE)
message(STATUS "Generating Executable: ${N}.exe Main File: ${X}"})
- add_executable(${N} ${X} ${ALGOS} ${COMMS} ${CONFIG} ${LOG})
+ add_executable(${N} ${X} ${ALGOS} ${IO_PROCS} ${COMMS} ${CONFIG} ${LOG})
target_link_libraries(${N} tinyxml2)
endforeach()
diff --git a/breadcrumbs/config/sample_config_file.cfg b/breadcrumbs/config/sample_config_file.cfg
new file mode 100644
index 0000000..76b075b
--- /dev/null
+++ b/breadcrumbs/config/sample_config_file.cfg
@@ -0,0 +1,22 @@
+
+
+ TestAlgo
+ Breadcrumbs
+
+ 4
+
+
+
+ VirtualInputProcessor0
+ VirtualInputProcessor
+
+ 2
+
+
+
+ VirtualOutputProcessor0
+ VirtualOutputProcessor
+
+ 1
+
+
diff --git a/breadcrumbs/include/IOProcessor.hpp b/breadcrumbs/include/IOProcessor.hpp
index 00fead2..2f4802d 100644
--- a/breadcrumbs/include/IOProcessor.hpp
+++ b/breadcrumbs/include/IOProcessor.hpp
@@ -2,25 +2,23 @@
#ifndef IO_PROCESSOR_HPP
#define IO_PROCESSOR_HPP
+#include "DataSyncThread.hpp"
-#include
-#include
-
-
-/*
-This class is the class that abstracts the io processor side of the data exchange between
-IO processors and algorithms
-
-*/
class IOProcessor
{
public:
- IOProcessor() {};
- // Async control
- unsigned int startComms();
- bool stopComms();
-
+ IOProcessor();
+ ~IOProcessor();
+
+ virtual void loop() {};
+ virtual bool loopCondition() { return false; };
+
+ int init();
+ int close();
+ DataSyncThread* getComms() { return comms; }
+private:
+ DataSyncThread* comms;
};
#endif
diff --git a/breadcrumbs/include/VirtualOutputIOProcessor.hpp b/breadcrumbs/include/VirtualOutputIOProcessor.hpp
new file mode 100644
index 0000000..835fba5
--- /dev/null
+++ b/breadcrumbs/include/VirtualOutputIOProcessor.hpp
@@ -0,0 +1,18 @@
+#ifndef VIRTUAL_OUTPUT_IO_PROCESSOR_HPP
+#define VIRTUAL_OUTPUT_IO_PROCESSOR_HPP
+
+#include "IOProcessor.hpp"
+
+class VirtualOutputIOProcessor : public IOProcessor
+{
+public:
+ using IOProcessor::IOProcessor;
+
+ void loop();
+ bool loopCondition();
+
+private:
+ int iterations = 10;
+};
+
+#endif
\ No newline at end of file
diff --git a/breadcrumbs/include/VirtualOutputProcessor.hpp b/breadcrumbs/include/VirtualOutputProcessor.hpp
deleted file mode 100644
index 067fef4..0000000
--- a/breadcrumbs/include/VirtualOutputProcessor.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#ifndef VIRTUAL_OUTPUT_PROCESSOR_HPP
-#define VIRTUAL_OUTPUT_PROCESSOR_HPP
-
-
-#include
-
-#include "IOProcessor.hpp"
-
-
-class VirtualOutputProcessor : public IOProcessor
-{
-public:
- using IOProcessor::IOProcessor;
-
- void threadRuntime(IOProcessor* ioProc);
-};
-
-#endif
diff --git a/breadcrumbs/src/algos/AlgoBreadcrumbs.cpp b/breadcrumbs/src/algos/AlgoBreadcrumbs.cpp
index 04ef348..7bdba8f 100644
--- a/breadcrumbs/src/algos/AlgoBreadcrumbs.cpp
+++ b/breadcrumbs/src/algos/AlgoBreadcrumbs.cpp
@@ -5,11 +5,11 @@
void AlgoBreadcrumbs::loop()
{
vector* attribs = pollForAttributes();
- // printf("Attrib length: %d\n", attribs->size());
if (attribs->size() > 0)
{
printf("Attrib length: %d\n", attribs->size());
}
+ _sleep(1000);
}
bool AlgoBreadcrumbs::loopCondition()
diff --git a/breadcrumbs/src/io_procs/IOProcessor.cpp b/breadcrumbs/src/io_procs/IOProcessor.cpp
new file mode 100644
index 0000000..9c9c38c
--- /dev/null
+++ b/breadcrumbs/src/io_procs/IOProcessor.cpp
@@ -0,0 +1,28 @@
+
+#include "IOProcessor.hpp"
+
+
+IOProcessor::IOProcessor()
+{
+ comms = new DataSyncThread(NULL);
+}
+
+IOProcessor::~IOProcessor()
+{
+ delete comms;
+}
+
+int IOProcessor::init()
+{
+ int result = comms->connectToAlgorithm("localhost");
+ if (!result)
+ comms->startComms();
+ return result;
+}
+
+int IOProcessor::close()
+{
+ int result = static_cast(comms->stopComms());
+ WSACleanup();
+ return result;
+}
diff --git a/breadcrumbs/src/io_procs/VirtualOutputIOProcessor.cpp b/breadcrumbs/src/io_procs/VirtualOutputIOProcessor.cpp
new file mode 100644
index 0000000..a475031
--- /dev/null
+++ b/breadcrumbs/src/io_procs/VirtualOutputIOProcessor.cpp
@@ -0,0 +1,16 @@
+
+#include "VirtualOutputIOProcessor.hpp"
+
+
+void VirtualOutputIOProcessor::loop()
+{
+ char testValue = 'a' + iterations;
+ Attribute attrib("testKey1", 1, &testValue);
+ getComms()->sendAttribute(attrib);
+ iterations--;
+}
+
+bool VirtualOutputIOProcessor::loopCondition()
+{
+ return iterations > 0;
+}
diff --git a/breadcrumbs/src/main/Breadcrumbs.cpp b/breadcrumbs/src/main/Breadcrumbs.cpp
index 930e963..83ca39f 100644
--- a/breadcrumbs/src/main/Breadcrumbs.cpp
+++ b/breadcrumbs/src/main/Breadcrumbs.cpp
@@ -3,7 +3,6 @@
#include "Config.hpp"
#include "AlgoBreadcrumbs.hpp"
-#include "VirtualOutputProcessor.hpp"
int main()
@@ -14,7 +13,6 @@ int main()
while (algorithm->loopCondition())
{
algorithm->loop();
- _sleep(1000);
}
return 0;
diff --git a/breadcrumbs/src/main/VirtualOutputProcessor.cpp b/breadcrumbs/src/main/VirtualOutputProcessor.cpp
index 9c87767..526ba8a 100644
--- a/breadcrumbs/src/main/VirtualOutputProcessor.cpp
+++ b/breadcrumbs/src/main/VirtualOutputProcessor.cpp
@@ -1,26 +1,23 @@
-#include "DataSyncThread.hpp"
#include
+#include "DataSyncThread.hpp"
+#include "VirtualOutputIOProcessor.hpp"
+
int main()
{
- DataSyncThread client(NULL);
- if (!client.connectToAlgorithm("localhost"))
+ IOProcessor* client = new VirtualOutputIOProcessor;
+
+ if (!client->init())
{
- client.startComms();
-
- for (int i = 0; i < 10; i++)
- {
- char testValue = 'a' + i;
- Attribute attrib("testKey1", 1, &testValue);
- client.sendAttribute(attrib);
- }
-
- client.stopComms();
- WSACleanup();
+ while (client->loopCondition())
+ client->loop();
- return 0;
+ int result = client->close();
+ delete client;
+ return result;
}
+
return 1;
}