UniSet @VERSION@
UniSetUno.h
1/*
2 * Copyright (c) 2026 Pavel Vainerman.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as
6 * published by the Free Software Foundation, version 2.1.
7 */
8// -------------------------------------------------------------------------
9#ifndef UniSetUno_H_
10#define UniSetUno_H_
11// -------------------------------------------------------------------------
12#include <memory>
13#include <string>
14#include <vector>
15#include <unordered_map>
16#include "UniSetTypes.h"
17#include "UniSetObject.h"
18#include "SharedMemory.h"
19#include "UniXML.h"
20#include "Debug.h"
21// -------------------------------------------------------------------------
22namespace uniset
23{
55 {
56 public:
57 UniSetUno();
58 ~UniSetUno();
59
67 bool init(int argc, const char* const* argv, const std::string& appName = "");
68
73 void run();
74
78 void stop();
79
83 std::shared_ptr<SharedMemory> getSharedMemory() const;
84
88 std::shared_ptr<UniSetObject> getExtension(const std::string& name) const;
89
93 std::vector<std::string> getExtensionNames() const;
94
98 bool isRunning() const;
99
103 std::shared_ptr<DebugStream> log();
104
111 static void help_print(int argc, const char* const* argv, const std::string& extName = "");
112
117 static bool help_extension(int argc, const char* const* argv, const std::string& extType);
118
125 static std::vector<std::string> parseArgsString(const std::string& argsStr);
126
134 static std::vector<std::string> collectExtensionArgs(
135 const std::shared_ptr<UniXML>& xml,
136 const std::string& appName);
137
138 // Supported extension types
139 static constexpr const char* EXT_SHARED_MEMORY = "SharedMemory";
140 static constexpr const char* EXT_UNET_EXCHANGE = "UNetExchange";
141 static constexpr const char* EXT_MBTCP_MASTER = "MBTCPMaster";
142 static constexpr const char* EXT_MBTCP_MULTIMASTER = "MBTCPMultiMaster";
143 static constexpr const char* EXT_MB_SLAVE = "MBSlave";
144 static constexpr const char* EXT_RTU_EXCHANGE = "RTUExchange";
145 static constexpr const char* EXT_OPCUA_SERVER = "OPCUAServer";
146 static constexpr const char* EXT_OPCUA_EXCHANGE = "OPCUAExchange";
147 static constexpr const char* EXT_IO_CONTROL = "IOControl";
148 static constexpr const char* EXT_LOGIC_PROCESSOR = "LogicProcessor";
149 static constexpr const char* EXT_MQTT_PUBLISHER = "MQTTPublisher";
150 static constexpr const char* EXT_WEBSOCKET_GATE = "UWebSocketGate";
151 static constexpr const char* EXT_BACKEND_CLICKHOUSE = "BackendClickHouse";
152 static constexpr const char* EXT_DBSERVER_POSTGRESQL = "DBServerPostgreSQL";
153
154 private:
155 struct ExtensionInfo
156 {
157 std::string type;
158 std::string name;
159 std::string prefix;
160 std::string args;
161 std::shared_ptr<UniSetObject> object;
162 };
163
164 bool loadConfig(const std::string& appName);
165 bool validateExtensions();
166 static std::string getDefaultPrefix(const std::string& type);
167 bool createExtensions(int argc, const char* const* argv);
168
169 std::shared_ptr<UniSetObject> createExtension(
170 int argc, const char* const* argv,
171 const ExtensionInfo& info);
172
173 std::shared_ptr<DebugStream> applog;
174 std::shared_ptr<SharedMemory> shm_;
175 std::vector<ExtensionInfo> extensions_;
176 std::unordered_map<std::string, std::shared_ptr<UniSetObject>> extByName_;
177
178 bool running_ = false;
179 std::string logfile_;
180 };
181
182} // end of namespace uniset
183// -------------------------------------------------------------------------
184#endif // UniSetUno_H_
185// -------------------------------------------------------------------------
UniSetUno - Combined application running multiple extensions in single process.
Definition UniSetUno.h:55
void run()
Definition UniSetUno.cc:629
std::shared_ptr< DebugStream > log()
Definition UniSetUno.cc:707
bool isRunning() const
Definition UniSetUno.cc:702
static std::vector< std::string > parseArgsString(const std::string &argsStr)
Definition UniSetUno.cc:913
static bool help_extension(int argc, const char *const *argv, const std::string &extType)
Definition UniSetUno.cc:712
static void help_print(int argc, const char *const *argv, const std::string &extName="")
Definition UniSetUno.cc:829
std::vector< std::string > getExtensionNames() const
Definition UniSetUno.cc:691
std::shared_ptr< SharedMemory > getSharedMemory() const
Definition UniSetUno.cc:676
void stop()
Definition UniSetUno.cc:662
std::shared_ptr< UniSetObject > getExtension(const std::string &name) const
Definition UniSetUno.cc:681
static std::vector< std::string > collectExtensionArgs(const std::shared_ptr< UniXML > &xml, const std::string &appName)
Definition UniSetUno.cc:954
bool init(int argc, const char *const *argv, const std::string &appName="")
Definition UniSetUno.cc:126
Definition AccessConfig.h:30