From 156d208dba73872c4d4d44dd6adfaa79069bd627 Mon Sep 17 00:00:00 2001 From: Carsten Patzke <carsten.patzke@desy.de> Date: Fri, 1 Dec 2017 16:58:52 +0100 Subject: [PATCH] * --- producer/api/include/producer/producer.h | 74 +++++++++---------- producer/api/src/producer.cpp | 4 +- producer/api/src/producer_impl.cpp | 44 ++++------- producer/api/src/producer_impl.h | 12 ++- .../src/dummy_detector.cpp | 44 ++++------- 5 files changed, 76 insertions(+), 102 deletions(-) diff --git a/producer/api/include/producer/producer.h b/producer/api/include/producer/producer.h index ce4cc9209..bc2f11da4 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 06e04169a..e92d98721 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 72813e3ef..12e3b2ff6 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 435fc63ce..5848a32ea 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 669f3b98a..abf10327d 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; } -- GitLab