From 042b3e7b0f9b5d7ac9b75fcc5c610442276a0048 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 12 Jul 2017 13:14:02 +0200 Subject: [PATCH] requester.h moves from pvDataCPP --- src/utils/Makefile | 2 ++ src/utils/pv/requester.h | 71 ++++++++++++++++++++++++++++++++++++++++ src/utils/requester.cpp | 44 +++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/utils/pv/requester.h create mode 100644 src/utils/requester.cpp diff --git a/src/utils/Makefile b/src/utils/Makefile index 3e4e0b8..dc02348 100644 --- a/src/utils/Makefile +++ b/src/utils/Makefile @@ -12,6 +12,7 @@ INC += pv/configuration.h INC += pv/likely.h INC += pv/wildcard.h INC += pv/fairQueue.h +INC += pv/requester.h INC += pv/destroyable.h LIBSRCS += hexDump.cpp @@ -20,4 +21,5 @@ LIBSRCS += logger.cpp LIBSRCS += introspectionRegistry.cpp LIBSRCS += configuration.cpp LIBSRCS += referenceCountingLock.cpp +LIBSRCS += requester.cpp LIBSRCS += wildcard.cpp diff --git a/src/utils/pv/requester.h b/src/utils/pv/requester.h new file mode 100644 index 0000000..f27d1ba --- /dev/null +++ b/src/utils/pv/requester.h @@ -0,0 +1,71 @@ +/* requester.h */ +/* + * Copyright information and license terms for this software can be + * found in the file LICENSE that is included with the distribution + */ +/** + * @author mrk + */ +#ifndef REQUESTER_H +#define REQUESTER_H +#include + +#include +#include + +#include + +namespace epics { namespace pvData { + +class Requester; +typedef std::tr1::shared_ptr RequesterPtr; + +enum MessageType { + infoMessage,warningMessage,errorMessage,fatalErrorMessage +}; +#define MESSAGE_TYPE_COUNT 4 + +epicsShareExtern std::string getMessageTypeName(MessageType messageType); + +/** + * @brief Callback class for passing messages to a requester. + * + * This is used by many other classes and also extended by other classes. + * The request is passed a message and a messageType. + * A message is just a string and a messageType is: +@code +enum MessageType { + infoMessage,warningMessage,errorMessage,fatalErrorMessage +}; +@endcode + * + */ + +class epicsShareClass Requester { +public: + POINTER_DEFINITIONS(Requester); + /** + * Destructor + */ + virtual ~Requester(){} + /** + * The requester must have a name. + * @return The requester's name. + */ + virtual std::string getRequesterName() = 0; + /** + * + * A message for the requester. + * @param message The message. + * @param messageType The type of message: + @code + enum MessageType { + infoMessage,warningMessage,errorMessage,fatalErrorMessage + }; + @endcode + */ + virtual void message(std::string const & message,MessageType messageType); +}; + +}} +#endif /* REQUESTER_H */ diff --git a/src/utils/requester.cpp b/src/utils/requester.cpp new file mode 100644 index 0000000..69599a6 --- /dev/null +++ b/src/utils/requester.cpp @@ -0,0 +1,44 @@ +/* requester.cpp */ +/* + * Copyright information and license terms for this software can be + * found in the file LICENSE that is included with the distribution + */ +/** + * @author mrk + */ +#include +#include +#include + +#include + +#define epicsExportSharedSymbols +#include +#include + +using std::string; + +namespace epics { namespace pvData { + +static StringArray messageTypeName(MESSAGE_TYPE_COUNT); + +string getMessageTypeName(MessageType messageType) +{ + // TODO not thread-safe + static Mutex mutex; + Lock xx(mutex); + if(messageTypeName[0].size()==0) { + messageTypeName[0] = "info"; + messageTypeName[1] = "warning"; + messageTypeName[2] = "error"; + messageTypeName[3] = "fatalError"; + } + return messageTypeName[messageType]; +} + +void Requester::message(std::string const & message,MessageType messageType) +{ + std::cerr << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")\n"; +} + +}}