From 984eed1a89b9543da04a6caab3578446df03f472 Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Fri, 2 Jun 2017 13:50:13 +0200 Subject: [PATCH] FairMQRegion and examples/advanced/Region --- examples/advanced/Region/CMakeLists.txt | 79 +++++++++++++++++++ .../Region/FairMQExampleRegionSampler.cxx | 46 +++++++++++ .../Region/FairMQExampleRegionSampler.h | 35 ++++++++ .../Region/FairMQExampleRegionSink.cxx | 37 +++++++++ .../advanced/Region/FairMQExampleRegionSink.h | 32 ++++++++ examples/advanced/Region/ex-region.json | 42 ++++++++++ .../Region/runExampleRegionSampler.cxx | 23 ++++++ .../advanced/Region/runExampleRegionSink.cxx | 21 +++++ .../advanced/Region/startMQExRegion.sh.in | 21 +++++ 9 files changed, 336 insertions(+) create mode 100644 examples/advanced/Region/CMakeLists.txt create mode 100644 examples/advanced/Region/FairMQExampleRegionSampler.cxx create mode 100644 examples/advanced/Region/FairMQExampleRegionSampler.h create mode 100644 examples/advanced/Region/FairMQExampleRegionSink.cxx create mode 100644 examples/advanced/Region/FairMQExampleRegionSink.h create mode 100644 examples/advanced/Region/ex-region.json create mode 100644 examples/advanced/Region/runExampleRegionSampler.cxx create mode 100644 examples/advanced/Region/runExampleRegionSink.cxx create mode 100755 examples/advanced/Region/startMQExRegion.sh.in diff --git a/examples/advanced/Region/CMakeLists.txt b/examples/advanced/Region/CMakeLists.txt new file mode 100644 index 00000000..249f6b2e --- /dev/null +++ b/examples/advanced/Region/CMakeLists.txt @@ -0,0 +1,79 @@ + ################################################################################ + # Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # + # # + # This software is distributed under the terms of the # + # GNU Lesser General Public Licence version 3 (LGPL) version 3, # + # copied verbatim in the file "LICENSE" # + ################################################################################ + +configure_file(${CMAKE_SOURCE_DIR}/examples/advanced/Region/ex-region.json + ${CMAKE_BINARY_DIR}/bin/config/ex-region.json) +configure_file(${CMAKE_SOURCE_DIR}/examples/advanced/Region/startMQExRegion.sh.in + ${CMAKE_BINARY_DIR}/bin/examples/advanced/Region/startMQExRegion.sh) + +Set(INCLUDE_DIRECTORIES + ${CMAKE_SOURCE_DIR}/fairmq + ${CMAKE_SOURCE_DIR}/fairmq/devices + ${CMAKE_SOURCE_DIR}/fairmq/tools + ${CMAKE_SOURCE_DIR}/fairmq/options + ${CMAKE_SOURCE_DIR}/examples/advanced/Region + ${CMAKE_CURRENT_BINARY_DIR} +) + +Set(SYSTEM_INCLUDE_DIRECTORIES + ${Boost_INCLUDE_DIR} + ${ZeroMQ_INCLUDE_DIR} +) + +Include_Directories(${INCLUDE_DIRECTORIES}) +Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES}) + +Set(LINK_DIRECTORIES + ${Boost_LIBRARY_DIRS} +) + +Link_Directories(${LINK_DIRECTORIES}) + +Set(SRCS + "FairMQExampleRegionSampler.cxx" + "FairMQExampleRegionSink.cxx" +) + +Set(DEPENDENCIES + ${DEPENDENCIES} + FairMQ +) + +Set(LIBRARY_NAME FairMQExampleRegion) + +GENERATE_LIBRARY() + +Set(Exe_Names + ex-region-sampler + ex-region-sink +) + +Set(Exe_Source + runExampleRegionSampler.cxx + runExampleRegionSink.cxx +) + +list(LENGTH Exe_Names _length) +math(EXPR _length ${_length}-1) + +set(BIN_DESTINATION share/fairbase/examples/advanced/Region/bin) +set(EXECUTABLE_OUTPUT_PATH "${EXECUTABLE_OUTPUT_PATH}/examples/advanced/Region") + +ForEach(_file RANGE 0 ${_length}) + list(GET Exe_Names ${_file} _name) + list(GET Exe_Source ${_file} _src) + set(EXE_NAME ${_name}) + set(SRCS ${_src}) + set(DEPENDENCIES FairMQExampleRegion) + GENERATE_EXECUTABLE() +EndForEach(_file RANGE 0 ${_length}) + +Install( + FILES ex-region.json + DESTINATION share/fairbase/examples/advanced/Region/config/ +) diff --git a/examples/advanced/Region/FairMQExampleRegionSampler.cxx b/examples/advanced/Region/FairMQExampleRegionSampler.cxx new file mode 100644 index 00000000..bafe9462 --- /dev/null +++ b/examples/advanced/Region/FairMQExampleRegionSampler.cxx @@ -0,0 +1,46 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ +/** + * FairMQExampleRegionSampler.cpp + * + * @since 2014-10-10 + * @author A. Rybalchenko + */ + +#include "FairMQExampleRegionSampler.h" +#include "FairMQLogger.h" +#include "FairMQProgOptions.h" // device->fConfig + +using namespace std; + +FairMQExampleRegionSampler::FairMQExampleRegionSampler() + : fMsgSize(10000) +{ +} + +void FairMQExampleRegionSampler::InitTask() +{ + fMsgSize = fConfig->GetValue("msg-size"); +} + +void FairMQExampleRegionSampler::Run() +{ + FairMQChannel& dataOutChannel = fChannels.at("data").at(0); + + FairMQRegionPtr region(NewRegionFor("data", 0, 10000000)); + + while (CheckCurrentState(RUNNING)) + { + FairMQMessagePtr msg(NewMessageFor("data", 0, region, region->GetData(), fMsgSize)); + dataOutChannel.Send(msg); + } +} + +FairMQExampleRegionSampler::~FairMQExampleRegionSampler() +{ +} diff --git a/examples/advanced/Region/FairMQExampleRegionSampler.h b/examples/advanced/Region/FairMQExampleRegionSampler.h new file mode 100644 index 00000000..d2441472 --- /dev/null +++ b/examples/advanced/Region/FairMQExampleRegionSampler.h @@ -0,0 +1,35 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ +/** + * FairMQExampleRegionSampler.h + * + * @since 2014-10-10 + * @author A. Rybalchenko + */ + +#ifndef FAIRMQEXAMPLEREGIONSAMPLER_H_ +#define FAIRMQEXAMPLEREGIONSAMPLER_H_ + +#include + +#include "FairMQDevice.h" + +class FairMQExampleRegionSampler : public FairMQDevice +{ + public: + FairMQExampleRegionSampler(); + virtual ~FairMQExampleRegionSampler(); + + protected: + int fMsgSize; + + virtual void InitTask(); + virtual void Run(); +}; + +#endif /* FAIRMQEXAMPLEREGIONSAMPLER_H_ */ diff --git a/examples/advanced/Region/FairMQExampleRegionSink.cxx b/examples/advanced/Region/FairMQExampleRegionSink.cxx new file mode 100644 index 00000000..fb254011 --- /dev/null +++ b/examples/advanced/Region/FairMQExampleRegionSink.cxx @@ -0,0 +1,37 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ +/** + * FairMQExampleRegionSink.cxx + * + * @since 2014-10-10 + * @author A. Rybalchenko + */ + +#include "FairMQExampleRegionSink.h" +#include "FairMQLogger.h" + +using namespace std; + +FairMQExampleRegionSink::FairMQExampleRegionSink() +{ +} + +void FairMQExampleRegionSink::Run() +{ + FairMQChannel& dataInChannel = fChannels.at("data").at(0); + + while (CheckCurrentState(RUNNING)) + { + FairMQMessagePtr msg(dataInChannel.Transport()->CreateMessage()); + dataInChannel.Receive(msg); + } +} + +FairMQExampleRegionSink::~FairMQExampleRegionSink() +{ +} diff --git a/examples/advanced/Region/FairMQExampleRegionSink.h b/examples/advanced/Region/FairMQExampleRegionSink.h new file mode 100644 index 00000000..7cf057f2 --- /dev/null +++ b/examples/advanced/Region/FairMQExampleRegionSink.h @@ -0,0 +1,32 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ +/** + * FairMQExampleRegionSink.h + * + * @since 2014-10-10 + * @author A. Rybalchenko + */ + +#ifndef FAIRMQEXAMPLEREGIONSINK_H_ +#define FAIRMQEXAMPLEREGIONSINK_H_ + +#include + +#include "FairMQDevice.h" + +class FairMQExampleRegionSink : public FairMQDevice +{ + public: + FairMQExampleRegionSink(); + virtual ~FairMQExampleRegionSink(); + + protected: + virtual void Run(); +}; + +#endif /* FAIRMQEXAMPLEREGIONSINK_H_ */ diff --git a/examples/advanced/Region/ex-region.json b/examples/advanced/Region/ex-region.json new file mode 100644 index 00000000..98113071 --- /dev/null +++ b/examples/advanced/Region/ex-region.json @@ -0,0 +1,42 @@ +{ + "fairMQOptions": { + "devices": [ + { + "id": "sampler1", + "channels": [ + { + "name": "data", + "sockets": [ + { + "type": "push", + "method": "bind", + "address": "tcp://*:7777", + "sndBufSize": 1000, + "rcvBufSize": 1000, + "rateLogging": 1 + } + ] + } + ] + }, + { + "id": "sink1", + "channels": [ + { + "name": "data", + "sockets": [ + { + "type": "pull", + "method": "connect", + "address": "tcp://localhost:7777", + "sndBufSize": 1000, + "rcvBufSize": 1000, + "rateLogging": 1 + } + ] + } + ] + } + ] + } +} diff --git a/examples/advanced/Region/runExampleRegionSampler.cxx b/examples/advanced/Region/runExampleRegionSampler.cxx new file mode 100644 index 00000000..ea279142 --- /dev/null +++ b/examples/advanced/Region/runExampleRegionSampler.cxx @@ -0,0 +1,23 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ + +#include "runFairMQDevice.h" +#include "FairMQExampleRegionSampler.h" + +namespace bpo = boost::program_options; + +void addCustomOptions(bpo::options_description& options) +{ + options.add_options() + ("msg-size", bpo::value()->default_value(1000), "Message size in bytes"); +} + +FairMQDevicePtr getDevice(const FairMQProgOptions& /*config*/) +{ + return new FairMQExampleRegionSampler(); +} diff --git a/examples/advanced/Region/runExampleRegionSink.cxx b/examples/advanced/Region/runExampleRegionSink.cxx new file mode 100644 index 00000000..10a72e0f --- /dev/null +++ b/examples/advanced/Region/runExampleRegionSink.cxx @@ -0,0 +1,21 @@ +/******************************************************************************** + * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence version 3 (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ + +#include "runFairMQDevice.h" +#include "FairMQExampleRegionSink.h" + +namespace bpo = boost::program_options; + +void addCustomOptions(bpo::options_description& options) +{ +} + +FairMQDevicePtr getDevice(const FairMQProgOptions& /*config*/) +{ + return new FairMQExampleRegionSink(); +} diff --git a/examples/advanced/Region/startMQExRegion.sh.in b/examples/advanced/Region/startMQExRegion.sh.in new file mode 100755 index 00000000..2a4cfca6 --- /dev/null +++ b/examples/advanced/Region/startMQExRegion.sh.in @@ -0,0 +1,21 @@ +#!/bin/bash +exRegionConfig="@CMAKE_BINARY_DIR@/bin/config/ex-region.json" + +msgSize="1000000" + +if [[ $1 =~ ^[0-9]+$ ]]; then + msgSize=$1 +fi + +SAMPLER="ex-region-sampler" +SAMPLER+=" --id sampler1" +SAMPLER+=" --msg-size $msgSize" +SAMPLER+=" --transport shmem" +SAMPLER+=" --mq-config $exRegionConfig" +xterm -geometry 80x23+0+0 -hold -e @CMAKE_BINARY_DIR@/bin/examples/advanced/Region/$SAMPLER & + +SINK="ex-region-sink" +SINK+=" --id sink1" +SINK+=" --transport shmem" +SINK+=" --mq-config $exRegionConfig" +xterm -geometry 80x23+500+0 -hold -e @CMAKE_BINARY_DIR@/bin/examples/advanced/Region/$SINK &