RTI Recording Service  Version 6.0.0
 All Data Structures Namespaces Files Functions Typedefs Enumerations Enumerator Groups
StorageReaderForwarder.hpp
1 /*
2  * (c) Copyright, Real-Time Innovations, 2017.
3  * All rights reserved.
4  *
5  * No duplications, whole or partial, manual or electronic, may be made
6  * without express written permission. Any such copies, or
7  * revisions thereof, must display this notice unaltered.
8  * This code contains trade secrets of Real-Time Innovations, Inc.
9  */
10 
11 #ifndef RTI_RECORDING_STORAGE_DETAIL_STORAGE_READER_FORWARDER_HPP_
12 #define RTI_RECORDING_STORAGE_DETAIL_STORAGE_READER_FORWARDER_HPP_
13 
14 
15 #include "log/log_common.h"
16 
17 #include "rti/routing/detail/ForwarderUtils.hpp"
18 #include "rti/routing/ServiceProperty.hpp"
19 
20 #include "recordingservice/recordingservice_storagereader.h"
21 #include "rti/recording/storage/detail/StorageStreamReaderForwarder.hpp"
22 #include "StorageStreamInfoReaderForwarder.hpp"
23 
24 namespace rti { namespace recording { namespace storage { namespace detail {
25 
26 class StorageReaderForwarder : public RTI_RecordingServiceStorageReader {
27 public:
28 
29  StorageReaderForwarder(StorageReader *storage_reader)
30  : storage_reader_(storage_reader)
31  {
32  create_stream_reader = StorageReaderForwarder::create_stream_reader_fwd;
33  delete_stream_reader = StorageReaderForwarder::delete_stream_reader_fwd;
34  create_stream_info_reader =
35  StorageReaderForwarder::create_stream_info_reader_fwd;
36  delete_stream_info_reader =
37  StorageReaderForwarder::delete_stream_info_reader_fwd;
38  delete_instance = StorageReaderForwarder::delete_instance_fwd;
39 
40  storage_reader_data = this;
41  }
42 
43  ~StorageReaderForwarder()
44  {
45  }
46 
47  static void delete_instance_fwd(
48  struct RTI_RecordingServiceStorageReader *storage_reader)
49  {
50  try {
51  StorageReaderForwarder *forwarder =
52  static_cast<StorageReaderForwarder *>(storage_reader);
53  delete forwarder;
54  } catch (const std::exception& ex) {
55  RTILog_printContextAndMsg(
56  RTI_FUNCTION_NAME,
57  &RTI_LOG_ANY_s,
58  ex.what());
59  } catch (...) {
60  RTILog_printContextAndMsg(
61  RTI_FUNCTION_NAME,
62  &RTI_LOG_ANY_s,
63  "unknown exception");
64  }
65  }
66 
67  static RTI_RecordingServiceStorageStreamReader * create_stream_reader_fwd(
68  void *storage_reader,
69  const struct RTI_RoutingServiceStreamInfo *native_stream_info,
70  const struct RTI_RoutingServiceProperties *native_properties)
71  {
72  try {
73  StorageReaderForwarder *forwarder =
74  static_cast<StorageReaderForwarder *>(storage_reader);
75  rti::routing::StreamInfo stream_info(*native_stream_info);
76  rti::routing::PropertySet properties;
77  rti::routing::PropertyAdapter::add_properties_from_native(
78  properties,
79  native_properties);
80  StorageStreamReaderForwarder *stream_reader_forwarder =
81  new StorageStreamReaderForwarder(
82  forwarder->storage_reader_->create_stream_reader(
83  stream_info,
84  properties),
85  forwarder->storage_reader_.get());
86  return stream_reader_forwarder;
87  } catch (const std::exception& ex) {
88  RTILog_printContextAndMsg(
89  RTI_FUNCTION_NAME,
90  &RTI_LOG_ANY_s,
91  ex.what());
92  return NULL;
93  } catch (...) {
94  RTILog_printContextAndMsg(
95  RTI_FUNCTION_NAME,
96  &RTI_LOG_ANY_s,
97  "unknown exception");
98  }
99  return NULL;
100  }
101 
102  static void delete_stream_reader_fwd(
103  void *,
104  RTI_RecordingServiceStorageStreamReader *storage_stream_reader)
105  {
106  try {
107  StorageStreamReaderForwarder *stream_reader_forwarder =
108  static_cast<StorageStreamReaderForwarder *>(
109  storage_stream_reader);
110  delete stream_reader_forwarder;
111  } catch (const std::exception& ex) {
112  RTILog_printContextAndMsg(
113  RTI_FUNCTION_NAME,
114  &RTI_LOG_ANY_s,
115  ex.what());
116  } catch (...) {
117  RTILog_printContextAndMsg(
118  RTI_FUNCTION_NAME,
119  &RTI_LOG_ANY_s,
120  "unknown exception");
121  }
122  }
123 
124  static RTI_RecordingServiceStorageStreamInfoReader *
125  create_stream_info_reader_fwd(
126  void *storage_reader_data,
127  const struct RTI_RoutingServiceProperties *native_properties)
128  {
129  try {
130  StorageReaderForwarder *forwarder =
131  static_cast<StorageReaderForwarder *>(storage_reader_data);
132  rti::routing::PropertySet properties;
133  rti::routing::PropertyAdapter::add_properties_from_native(
134  properties,
135  native_properties);
136  StorageStreamInfoReaderForwarder *disc_reader_forwarder =
137  new StorageStreamInfoReaderForwarder(
138  forwarder->storage_reader_->create_stream_info_reader(
139  properties),
140  forwarder->storage_reader_.get());
141  return disc_reader_forwarder;
142  } catch (const std::exception& ex) {
143  RTILog_printContextAndMsg(
144  RTI_FUNCTION_NAME,
145  &RTI_LOG_ANY_s,
146  ex.what());
147  return NULL;
148  } catch (...) {
149  RTILog_printContextAndMsg(
150  RTI_FUNCTION_NAME,
151  &RTI_LOG_ANY_s,
152  "unknown exception");
153  }
154  return NULL;
155  }
156 
157  static void delete_stream_info_reader_fwd(
158  void *,
159  RTI_RecordingServiceStorageStreamInfoReader *stream_info_reader)
160  {
161  try {
162  StorageStreamInfoReaderForwarder *disc_reader_forwarder =
163  static_cast<StorageStreamInfoReaderForwarder *>(
164  stream_info_reader);
165  delete disc_reader_forwarder;
166  } catch (const std::exception& ex) {
167  RTILog_printContextAndMsg(
168  RTI_FUNCTION_NAME,
169  &RTI_LOG_ANY_s,
170  ex.what());
171  } catch (...) {
172  RTILog_printContextAndMsg(
173  RTI_FUNCTION_NAME,
174  &RTI_LOG_ANY_s,
175  "unknown exception");
176  }
177  }
178 
179 private:
180 
181  rtiboost::shared_ptr<StorageReader> storage_reader_;
182 
183 };
184 
185 } } } }
186 
187 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_

RTI Recording Service Version 6.0.0 Copyright © Sun Mar 3 2019 Real-Time Innovations, Inc