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; }