X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2FLauncher.hpp;h=c7181ee2eccd37bd005d85f235bb9c022d2df805;hb=refs%2Fheads%2Fmaster;hp=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hpb=68a8fe342d8337ec1a86b57920bc7dcf7faf2413;p=anna.git diff --git a/example/diameter/launcher/Launcher.hpp b/example/diameter/launcher/Launcher.hpp index e69de29..c7181ee 100644 --- a/example/diameter/launcher/Launcher.hpp +++ b/example/diameter/launcher/Launcher.hpp @@ -0,0 +1,134 @@ +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // + + +#ifndef example_diameter_launcher_Launcher_hpp +#define example_diameter_launcher_Launcher_hpp + +// Standard +#include +#include +#include + +// Project +#include +#include +#include +#include + +// Process +#include +#include +#include + + +namespace anna { + namespace timex { + class Engine; + } + namespace diameter { + namespace codec { + class Engine; + } + namespace comm { + class OriginHost; + } + } +} + +class TestManager; +class MyDiameterEntity; +class MyLocalServer; +class MyDiameterEngine; + +// OriginHost resources +typedef std::map origin_hosts_t; +typedef std::map::const_iterator origin_hosts_it; +typedef std::map::iterator origin_hosts_nc_it; + + +class Launcher : public anna::comm::Application { + + // Start time: + anna::time::Date a_start_time; + std::string a_initialWorkingDirectory; + + // Core engines: + MyCommunicator *a_communicator; + anna::timex::Engine* a_timeEngine; + MyCounterRecorder *a_counterRecorder; + anna::Millisecond a_admlMinResolution; + MyCounterRecorderClock *a_counterRecorderClock; + + // Nodes deployment: + anna::diameter::comm::OriginHost *a_workingNode; + anna::diameter::comm::OriginHost *a_operatedHost; // auxiliary for eventOperation + + // comm resources: + anna::comm::ServerSocket* a_httpServerSocket; // HTTP + + std::string getSignalUSR2InputFile() const ; + std::string getSignalUSR2OutputFile() const ; + + void servicesFromXML(const anna::xml::Node* servicesNode, bool bindResources) noexcept(false); + void initialize() noexcept(false); // HTTP + void run() noexcept(false); + + + +public: + Launcher(); + //~Launcher(); TODO + + anna::Millisecond checkTimeMeasure(const std::string ¶meter, const std::string &value) noexcept(false); + + void loadServicesFromFile(const std::string & xmlPathFile, bool bindResources) noexcept(false); + void loadServicesFromXMLString(const std::string & xmlString, bool bindResources) noexcept(false); + void startServices() noexcept(false); + + bool setWorkingNode(const std::string &name) ; + void setNodeAuto() { a_workingNode = NULL; a_operatedHost = NULL; } + anna::diameter::comm::OriginHost *getOriginHost(const std::string &name) const noexcept(false); + anna::diameter::comm::OriginHost *getOriginHost(const anna::diameter::codec::Message &message) const noexcept(false); + anna::diameter::comm::OriginHost *getOriginHost(const anna::DataBlock &messageDataBlock) const noexcept(false); + + bool uniqueOriginHost() const ; + + // Operated host for communication resources smart assignment //////////////////////////////////////////////////////////// + void updateOperatedOriginHostWithMessage(const anna::diameter::codec::Message &message) noexcept(false); + void updateOperatedOriginHostWithMessage(const anna::DataBlock &messageDataBlock) noexcept(false); + anna::diameter::comm::OriginHost *getWorkingNode() const noexcept(false); + anna::diameter::comm::OriginHost *getOperatedHost() const noexcept(false); + void setOperatedHost(anna::diameter::comm::OriginHost *); + MyDiameterEntity *getOperatedEntity() const noexcept(false); + MyLocalServer *getOperatedServer() const noexcept(false); + MyDiameterEngine *getOperatedEngine() const noexcept(false); + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const std::string & getInitialWorkingDirectory() const { return a_initialWorkingDirectory; } + + MyCommunicator *getCommunicator() { return a_communicator; } + bool eventOperation(const std::string &, std::string &) noexcept(false); // returns success/failed + void forceCountersRecord() noexcept(false) { if (a_counterRecorderClock) a_counterRecorderClock->tick(); } + void logStatisticsSamples(const std::string &conceptsList) ; + + + anna::xml::Node* asXML(anna::xml::Node* parent) const ; + void resetStatistics() ; + void resetCounters() ; + void signalUSR2() noexcept(false); + void signalTerminate() noexcept(false); + anna::xml::Node* oamAsXML(anna::xml::Node* parent) const ; + anna::xml::Node* statsAsXML(anna::xml::Node* parent) const ; + + // helpers + bool getDataBlockFromHexFile(const std::string &pathfile, anna::DataBlock &db) const noexcept(false); + + friend class TestManager; +}; + +#endif