diff --git a/producer/api/include/producer/producer.h b/producer/api/include/producer/producer.h index ce4cc920975f500ac978a6a7e3f4139339ea3ff9..bc2f11da4a69eb7ce2824167231df73aafc302d0 100644 --- a/producer/api/include/producer/producer.h +++ b/producer/api/include/producer/producer.h @@ -6,45 +6,41 @@ #include <common/networking.h> #include <system_wrappers/io.h> -namespace hidra2 -{ - enum ProducerError { - PRODUCER_ERROR__OK, - PRODUCER_ERROR__CONNECTION_NOT_READY, - PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START, - }; - - enum ProducerStatus { - PRODUCER_STATUS__DISCONNECTED, - PRODUCER_STATUS__CONNECTING, - PRODUCER_STATUS__CONNECTED, - PRODUCER_STATUS__SENDING, - PRODUCER_STATUS__ERROR, - }; - - struct FileChunk { - void* ptr; - uint64_t start_byte; - uint64_t chunk_size; - }; - - - class Producer - { - private: - IO io - public: - static std::unique_ptr<Producer> create(); - - //virtual ~Producer() = 0;W - - virtual void __set_io(IO* io); - - virtual uint64_t get_version() const = 0; - virtual ProducerStatus get_status() const = 0; - virtual ProducerError connectToReceiver(std::string receiver_address) = 0; - virtual FileReferenceId send(std::string filename, uint64_t file_size, void* data) = 0; - }; +namespace hidra2 { +enum ProducerError { + PRODUCER_ERROR__OK, + PRODUCER_ERROR__CONNECTION_NOT_READY, + PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START, +}; + +enum ProducerStatus { + PRODUCER_STATUS__DISCONNECTED, + PRODUCER_STATUS__CONNECTING, + PRODUCER_STATUS__CONNECTED, + PRODUCER_STATUS__SENDING, + PRODUCER_STATUS__ERROR, +}; + +struct FileChunk { + void *ptr; + uint64_t start_byte; + uint64_t chunk_size; +}; + +class Producer { + public: + static std::unique_ptr<Producer> create(); + + //virtual ~Producer() = 0; + + virtual void __set_io(IO *io) = 0; + + virtual uint64_t get_version() const = 0; + virtual ProducerStatus get_status() const = 0; + + virtual ProducerError connect_to_receiver(std::string receiver_address) = 0; + virtual ProducerError send(std::string filename, uint64_t file_size, void *data) = 0; +}; } #endif //HIDRA2__PRODUCER_PRODUCER_H diff --git a/producer/api/src/producer.cpp b/producer/api/src/producer.cpp index 06e04169a380a20409a7178d86fc79a9ae209c6a..e92d9872141c6420bd746ff0de37153901b4eb53 100644 --- a/producer/api/src/producer.cpp +++ b/producer/api/src/producer.cpp @@ -1,8 +1,6 @@ #include "producer/producer.h" #include "producer_impl.h" - -std::unique_ptr<hidra2::Producer> hidra2::Producer::create() -{ +std::unique_ptr<hidra2::Producer> hidra2::Producer::create() { return std::unique_ptr<hidra2::Producer>(new ProducerImpl()); } diff --git a/producer/api/src/producer_impl.cpp b/producer/api/src/producer_impl.cpp index 72813e3effb7b490fdc7e56d90ff8d941cb161f3..12e3b2ff608db24b5958c931522582f5839f3a8c 100644 --- a/producer/api/src/producer_impl.cpp +++ b/producer/api/src/producer_impl.cpp @@ -1,44 +1,30 @@ +#include <system_wrappers/system_io.h> #include "producer_impl.h" const uint32_t hidra2::ProducerImpl::kVersion = 1; +const hidra2::IO *hidra2::ProducerImpl::kDefaultIO = new hidra2::SystemIO(); + hidra2::FileReferenceId hidra2::ProducerImpl::kGlobalReferenceId = 0; -uint64_t hidra2::ProducerImpl::get_version() const { - return kVersion; +hidra2::ProducerImpl::ProducerImpl() { + __set_io(ProducerImpl::kDefaultIO); } -hidra2::ProducerStatus hidra2::ProducerImpl::get_status() const { - return PRODUCER_STATUS__CONNECTED; +void hidra2::ProducerImpl::__set_io(hidra2::IO *io) { + this->io = io; } -hidra2::ProducerError hidra2::ProducerImpl::connectToReceiver(std::string receiver_address) { - return PRODUCER_ERROR__OK; +uint64_t hidra2::ProducerImpl::get_version() const { + return kVersion; } -hidra2::FileReferenceId -hidra2::ProducerImpl::send(std::string filename, uint64_t file_size, Yieldable<hidra2::FileChunk>* chunk_provider, - std::function<void(hidra2::FileChunk)> after_processing, - std::function<void(hidra2::FileReferenceId, hidra2::ProducerError)> file_done, - hidra2::ProducerError &error) { - hidra2::FileReferenceId ref_id = kGlobalReferenceId++; - - if (chunk_provider->is_done()) { - return PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START; - } - do { - chunk_provider->next(); - } while (!chunk_provider->is_done()); - - file_done(ref_id, hidra2::ProducerError::PRODUCER_ERROR__OK); - - error = PRODUCER_ERROR__OK; - return ref_id; +hidra2::ProducerStatus hidra2::ProducerImpl::get_status() const { + return PRODUCER_STATUS__CONNECTED; } -/* -hidra2::ProducerImpl::~ProducerImpl() -{ +hidra2::ProducerError hidra2::ProducerImpl::connect_to_receiver(std::string receiver_address) { + return PRODUCER_ERROR__OK; } - */ - +hidra2::ProducerError hidra2::ProducerImpl::send(std::string filename, uint64_t file_size, void *data) { +} diff --git a/producer/api/src/producer_impl.h b/producer/api/src/producer_impl.h index 435fc63ce2b640157b14d470e59f6d6f992036f7..5848a32ead6471ac6ddc95af718bd7e7d6c91ca9 100644 --- a/producer/api/src/producer_impl.h +++ b/producer/api/src/producer_impl.h @@ -6,21 +6,27 @@ namespace hidra2 { class ProducerImpl : public Producer { + friend Producer; private: static const uint32_t kVersion; static FileReferenceId kGlobalReferenceId; + static IO* const kDefaultIO; + + IO* io; + + ProducerImpl() = default; public: ProducerImpl(const ProducerImpl &) = delete; ProducerImpl &operator=(const ProducerImpl &) = delete; - ProducerImpl() = default; //~ProducerImpl() override; + void __set_io(IO* io) override; uint64_t get_version() const override; ProducerStatus get_status() const override; - ProducerError connectToReceiver(std::string receiver_address) override; - FileReferenceId send(std::string filename, uint64_t file_size, void* data) override; + ProducerError connect_to_receiver(std::string receiver_address) override; + ProducerError send(std::string filename, uint64_t file_size, void* data) override; }; } diff --git a/producer/dummy-event-detector-cpp/src/dummy_detector.cpp b/producer/dummy-event-detector-cpp/src/dummy_detector.cpp index 669f3b98a7b7710a004f5f84f1408f519c90eb32..abf10327da5a6c257ee694169c1e7ac6807e5ce7 100644 --- a/producer/dummy-event-detector-cpp/src/dummy_detector.cpp +++ b/producer/dummy-event-detector-cpp/src/dummy_detector.cpp @@ -1,37 +1,25 @@ #include "dummy_detector.h" -#include "dummy_yieldable.h" #include <iostream> -int DummyDetector::main(int argc, char** argv) -{ +int DummyDetector::main(int argc, char **argv) { - std::unique_ptr<hidra2::Producer> producer = hidra2::Producer::create(); - producer->connectToReceiver("127.0.0.1"); + std::unique_ptr<hidra2::Producer> producer = hidra2::Producer::create(); + producer->connect_to_receiver("127.0.0.1"); - const size_t size = 1024*20; - void* buffer = malloc(size); - auto dummy_yieldable = new DummyYieldable(buffer, size); + const size_t size = 1024 * 20; + void *buffer = malloc(size); - hidra2::ProducerError error; - producer->send("test", size, dummy_yieldable, - [&dummy_yieldable, &buffer](hidra2::FileChunk fileChunk) { - if(dummy_yieldable->is_done()) { - free(buffer); - delete dummy_yieldable; - } - }, [this](hidra2::FileReferenceId reference_id, hidra2::ProducerError error) { - handle_file_done(reference_id, error); - }, - error); + hidra2::ProducerError error; + error = producer->send("testfile", size, buffer); - return 0; -} + if(error) { + std::cerr << "File was not successfully send, ErrorCode: " << error << std::endl; + } + else { + std::cout << "File was successfully send." << std::endl; + } + + free(buffer); -void DummyDetector::handle_file_done(hidra2::FileReferenceId reference_id, hidra2::ProducerError error) -{ - if(!error) { - std::cout << "File " << reference_id << " was successfully send." << std::endl; - return; - } - std::cout << "An error occurred while sending file " << error << std::endl; + return 0; }