Aktualizr
C++ SOTA Client
metadatafile.h
1 #ifndef OPCUABRIDGE_METADATAFILE_H_
2 #define OPCUABRIDGE_METADATAFILE_H_
3 
4 #include <utility>
5 
6 #include "common.h"
7 
8 namespace opcuabridge {
9 class MetadataFile {
10  public:
11  typedef BinaryDataType block_type;
12 
13  MetadataFile() = default;
14  virtual ~MetadataFile() = default;
15 
16  const int& getGUID() const { return GUID_; }
17  void setGUID(const int& GUID) { GUID_ = GUID; }
18  const std::size_t& getFileNumber() const { return fileNumber_; }
19  void setFileNumber(const std::size_t& fileNumber) { fileNumber_ = fileNumber; }
20  const std::string& getFilename() const { return filename_; }
21  void setFilename(const std::string& filename) { filename_ = filename; }
22  block_type& getMetadata() { return metadata_; }
23  const block_type& getMetadata() const { return metadata_; }
24  void setMetadata(const block_type& metadata) { metadata_ = metadata; }
25  void setMetadata(const Json::Value& metadata) {
26  Json::FastWriter fw;
27  std::string s = fw.write(metadata);
28  metadata_.assign(s.begin(), s.end());
29  }
30  INITSERVERNODESET_BIN_FUNCTION_DEFINITION(MetadataFile, &metadata_) // InitServerNodeset(UA_Server*)
31  CLIENTREAD_BIN_FUNCTION_DEFINITION(&metadata_) // ClientRead(UA_Client*)
32  CLIENTWRITE_BIN_FUNCTION_DEFINITION(&metadata_) // ClientWrite(UA_Client*)
33 
34  void setOnBeforeReadCallback(MessageOnBeforeReadCallback<MetadataFile>::type cb) {
35  on_before_read_cb_ = std::move(cb);
36  }
37  void setOnAfterWriteCallback(MessageOnAfterWriteCallback<MetadataFile>::type cb) {
38  on_after_write_cb_ = std::move(cb);
39  }
40 
41  protected:
42  int GUID_{};
43  std::size_t fileNumber_{};
44  std::string filename_;
45  block_type metadata_;
46 
47  MessageOnBeforeReadCallback<MetadataFile>::type on_before_read_cb_;
48  MessageOnAfterWriteCallback<MetadataFile>::type on_after_write_cb_;
49 
50  private:
51  static const char* node_id_;
52  static const char* bin_node_id_;
53 
54  Json::Value wrapMessage() const {
55  Json::Value v;
56  v["GUID"] = getGUID();
57  v["fileNumber"] = static_cast<Json::Value::UInt>(getFileNumber());
58  v["filename"] = getFilename();
59  return v;
60  }
61  void unwrapMessage(Json::Value v) {
62  setGUID(v["GUID"].asInt());
63  setFileNumber(v["fileNumber"].asUInt());
64  setFilename(v["filename"].asString());
65  }
66 
67  WRAPMESSAGE_FUCTION_DEFINITION(MetadataFile)
68  UNWRAPMESSAGE_FUCTION_DEFINITION(MetadataFile)
69  READ_FUNCTION_FRIEND_DECLARATION(MetadataFile)
70  WRITE_FUNCTION_FRIEND_DECLARATION(MetadataFile)
71  INTERNAL_FUNCTIONS_FRIEND_DECLARATION(MetadataFile)
72 
73 #ifdef OPCUABRIDGE_ENABLE_SERIALIZATION
74  SERIALIZE_FUNCTION_FRIEND_DECLARATION
75 
76  DEFINE_SERIALIZE_METHOD() {
77  SERIALIZE_FIELD(ar, "GUID_", GUID_);
78  SERIALIZE_FIELD(ar, "fileNumber_", fileNumber_);
79  SERIALIZE_FIELD(ar, "filename_", filename_);
80  SERIALIZE_FIELD(ar, "metadata_", metadata_);
81  }
82 #endif // OPCUABRIDGE_ENABLE_SERIALIZATION
83 };
84 } // namespace opcuabridge
85 
86 #endif // OPCUABRIDGE_METADATAFILE_H_