00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 #pragma once 00012 00013 #include <opc/ua/event.h> 00014 #include <opc/ua/services/attributes.h> 00015 #include <opc/ua/services/node_management.h> 00016 #include <opc/ua/services/view.h> 00017 #include <opc/ua/services/subscriptions.h> 00018 00019 00020 namespace OpcUa 00021 { 00022 namespace Server 00023 { 00024 00025 typedef void DataChangeCallback(const NodeId& node, AttributeId attribute, DataValue); 00026 00027 class AddressSpace 00028 : public ViewServices 00029 , public AttributeServices 00030 , public NodeManagementServices 00031 { 00032 public: 00033 DEFINE_CLASS_POINTERS(AddressSpace); 00034 00035 //Server side methods 00036 virtual uint32_t AddDataChangeCallback(const NodeId& node, AttributeId attribute, std::function<DataChangeCallback> callback) = 0; 00037 virtual void DeleteDataChangeCallback(uint32_t clienthandle) = 0; 00038 virtual StatusCode SetValueCallback(const NodeId& node, AttributeId attribute, std::function<DataValue(void)> callback) = 0; 00039 //FIXME : SHould we also expose SetValue and GetValue on server side? then we need to lock them ... 00040 }; 00041 00042 AddressSpace::UniquePtr CreateAddressSpace(bool debug); 00043 00044 } // namespace UaServer 00045 } // nmespace OpcUa