open62541pp 0.19.0
C++ wrapper of open62541
Loading...
Searching...
No Matches
server_context.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <functional>
5#include <map>
6#include <mutex>
7#include <utility> // pair
8#include <variant>
9
10#include "open62541pp/config.hpp"
13#include "open62541pp/detail/open62541/common.h" // UA_AccessControl
17#include "open62541pp/types.hpp" // NodeId, Variant
18#include "open62541pp/ua/types.hpp" // IntegerId
19
20namespace opcua {
21class Session;
22} // namespace opcua
23
24namespace opcua::detail {
25
26struct NodeContext {
27 UniqueOrRawPtr<ValueCallbackBase> valueCallback;
28 UniqueOrRawPtr<DataSourceBase> dataSource;
29
30#ifdef UA_ENABLE_METHODCALLS
31 using MethodCallback = std::variant<
32 std::function<void(Span<const Variant> input, Span<Variant> output)>,
33 std::function<StatusCode(
34 Session& session,
35 Span<const Variant> input,
36 Span<Variant> output,
37 const NodeId& methodId,
38 const NodeId& objectId
39 )>>;
40
41 MethodCallback methodCallback;
42#endif
43};
44
45struct SessionRegistry {
46 using Context = void*;
47
48 decltype(UA_AccessControl::activateSession) activateSessionUser{nullptr};
49 decltype(UA_AccessControl::closeSession) closeSessionUser{nullptr};
50 std::map<NodeId, Context> sessions;
51 std::mutex mutex;
52};
53
54/**
55 * Internal storage for Server class.
56 */
57struct ServerContext {
58 ExceptionCatcher exceptionCatcher;
59 SessionRegistry sessionRegistry;
60 std::atomic<bool> running{false};
61 std::mutex mutexRun;
62
63#ifdef UA_ENABLE_SUBSCRIPTIONS
64 using SubId = IntegerId; // always 0
65 using MonId = IntegerId;
66 using SubMonId = std::pair<SubId, MonId>;
67 ContextMap<SubMonId, services::detail::MonitoredItemContext> monitoredItems;
68#endif
69
70 ContextMap<NodeId, NodeContext> nodeContexts;
71};
72
73} // namespace opcua::detail
std::variant< std::function< void(Span< const Variant > input, Span< Variant > output)>, std::function< StatusCode(Session &session, Span< const Variant > input, Span< Variant > output, const NodeId &methodId, const NodeId &objectId)> > MethodCallback
Method callback.
uint32_t IntegerId
IntegerId.
Definition types.hpp:84
void(* closeSession)(UA_Server *server, UA_AccessControl *ac, const UA_NodeId *sessionId, void *sessionContext)
UA_StatusCode(* activateSession)(UA_Server *server, UA_AccessControl *ac, const UA_EndpointDescription *endpointDescription, const UA_ByteString *secureChannelRemoteCertificate, const UA_NodeId *sessionId, const UA_ExtensionObject *userIdentityToken, void **sessionContext)