11 #ifndef RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_
12 #define RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_
17 #include "log/log_common.h"
18 #include "rti/routing/detail/ForwarderUtils.hpp"
19 #include "rti/routing/ServiceProperty.hpp"
21 #include "recordingservice/recordingservice_storagewriter.h"
22 #include "rti/recording/storage/StorageDefs.hpp"
23 #include "rti/recording/storage/detail/StorageStreamWriterForwarder.hpp"
25 namespace rti {
namespace recording {
namespace storage {
namespace detail {
27 class StorageWriterForwarder :
public RTI_RecordingServiceStorageWriter {
30 StorageWriterForwarder(StorageWriter *storage_writer) :
31 storage_writer_(storage_writer)
34 create_stream_writer = StorageWriterForwarder::create_stream_writer_fwd;
36 create_participant_writer =
37 StorageWriterForwarder::create_participant_writer_fwd;
38 create_publication_writer =
39 StorageWriterForwarder::create_publication_writer_fwd;
40 create_subscription_writer =
41 StorageWriterForwarder::create_subscription_writer_fwd;
43 delete_stream_writer = StorageWriterForwarder::delete_stream_writer_fwd;
45 delete_participant_writer =
46 StorageWriterForwarder::delete_participant_writer_fwd;
47 delete_publication_writer =
48 StorageWriterForwarder::delete_publication_writer_fwd;
49 delete_subscription_writer =
50 StorageWriterForwarder::delete_subscription_writer_fwd;
52 delete_instance = StorageWriterForwarder::delete_instance_fwd;
54 storage_writer_data =
this;
57 ~StorageWriterForwarder()
61 static void delete_instance_fwd(
62 struct RTI_RecordingServiceStorageWriter *storage_writer)
65 StorageWriterForwarder *forwarder =
66 static_cast<StorageWriterForwarder *
>(storage_writer);
68 }
catch (
const std::exception& ex) {
69 RTILog_printContextAndMsg(
70 RTI_LOG_BIT_EXCEPTION,
75 RTILog_printContextAndMsg(
76 RTI_LOG_BIT_EXCEPTION,
83 static RTI_RecordingServiceStorageStreamWriter * create_stream_writer_fwd(
85 const RTI_RoutingServiceStreamInfo *native_stream_info,
86 const RTI_RoutingServiceProperties *native_properties)
88 RTIBOOST_ASSERT(!rti::recording::is_discovery_stream(
89 std::string(native_stream_info->stream_name)));
91 StorageWriterForwarder *forwarder =
92 static_cast<StorageWriterForwarder *
>(storage_writer);
93 rti::routing::StreamInfo stream_info(*native_stream_info);
94 rti::routing::PropertySet properties;
95 rti::routing::PropertyAdapter::add_properties_from_native(
98 StorageStreamWriterForwarder *stream_writer_forwarder =
99 new StorageStreamWriterForwarder(
100 forwarder->storage_writer_->create_stream_writer(
103 forwarder->storage_writer_.get());
104 return stream_writer_forwarder;
105 }
catch (
const std::exception& ex) {
106 RTILog_printContextAndMsg(
107 RTI_LOG_BIT_EXCEPTION,
112 RTILog_printContextAndMsg(
113 RTI_LOG_BIT_EXCEPTION,
116 "unknown exception");
121 static RTI_RecordingServiceStorageParticipantWriter *
122 create_participant_writer_fwd(
void *storage_writer)
125 StorageWriterForwarder *forwarder =
126 static_cast<StorageWriterForwarder *
>(storage_writer);
127 StorageParticipantWriterForwarder *stream_writer_forwarder =
128 new StorageParticipantWriterForwarder(
129 forwarder->storage_writer_->create_participant_writer(),
130 forwarder->storage_writer_.get());
131 return stream_writer_forwarder;
132 }
catch (
const std::exception& ex) {
133 RTILog_printContextAndMsg(
134 RTI_LOG_BIT_EXCEPTION,
139 RTILog_printContextAndMsg(
140 RTI_LOG_BIT_EXCEPTION,
143 "unknown exception");
148 static RTI_RecordingServiceStoragePublicationWriter *
149 create_publication_writer_fwd(
void *storage_writer)
152 StorageWriterForwarder *forwarder =
153 static_cast<StorageWriterForwarder *
>(storage_writer);
154 StoragePublicationWriterForwarder *stream_writer_forwarder =
155 new StoragePublicationWriterForwarder(
156 forwarder->storage_writer_->create_publication_writer(),
157 forwarder->storage_writer_.get());
158 return stream_writer_forwarder;
159 }
catch (
const std::exception& ex) {
160 RTILog_printContextAndMsg(
161 RTI_LOG_BIT_EXCEPTION,
166 RTILog_printContextAndMsg(
167 RTI_LOG_BIT_EXCEPTION,
170 "unknown exception");
175 static RTI_RecordingServiceStorageSubscriptionWriter *
176 create_subscription_writer_fwd(
void *storage_writer)
179 StorageWriterForwarder *forwarder =
180 static_cast<StorageWriterForwarder *
>(storage_writer);
181 StorageSubscriptionWriterForwarder *stream_writer_forwarder =
182 new StorageSubscriptionWriterForwarder(
183 forwarder->storage_writer_->create_subscription_writer(),
184 forwarder->storage_writer_.get());
185 return stream_writer_forwarder;
186 }
catch (
const std::exception& ex) {
187 RTILog_printContextAndMsg(
188 RTI_LOG_BIT_EXCEPTION,
193 RTILog_printContextAndMsg(
194 RTI_LOG_BIT_EXCEPTION,
197 "unknown exception");
202 static void delete_stream_writer_fwd(
204 RTI_RecordingServiceStorageStreamWriter *storage_stream_writer)
207 StorageStreamWriterForwarder *stream_writer_forwarder =
208 static_cast<StorageStreamWriterForwarder *
>(
209 storage_stream_writer);
210 delete stream_writer_forwarder;
211 }
catch (
const std::exception& ex) {
212 RTILog_printContextAndMsg(
213 RTI_LOG_BIT_EXCEPTION,
218 RTILog_printContextAndMsg(
219 RTI_LOG_BIT_EXCEPTION,
222 "unknown exception");
226 static void delete_participant_writer_fwd(
228 RTI_RecordingServiceStorageParticipantWriter *stream_writer)
231 StorageParticipantWriterForwarder *forwarder =
232 static_cast<StorageParticipantWriterForwarder *
>(
235 }
catch (
const std::exception& ex) {
236 RTILog_printContextAndMsg(
237 RTI_LOG_BIT_EXCEPTION,
242 RTILog_printContextAndMsg(
243 RTI_LOG_BIT_EXCEPTION,
246 "unknown exception");
250 static void delete_publication_writer_fwd(
252 RTI_RecordingServiceStoragePublicationWriter *stream_writer)
255 StoragePublicationWriterForwarder *forwarder =
256 static_cast<StoragePublicationWriterForwarder *
>(
259 }
catch (
const std::exception& ex) {
260 RTILog_printContextAndMsg(
261 RTI_LOG_BIT_EXCEPTION,
266 RTILog_printContextAndMsg(
267 RTI_LOG_BIT_EXCEPTION,
270 "unknown exception");
274 static void delete_subscription_writer_fwd(
276 RTI_RecordingServiceStorageSubscriptionWriter *stream_writer)
279 StorageSubscriptionWriterForwarder *forwarder =
280 static_cast<StorageSubscriptionWriterForwarder *
>(
283 }
catch (
const std::exception& ex) {
284 RTILog_printContextAndMsg(
285 RTI_LOG_BIT_EXCEPTION,
290 RTILog_printContextAndMsg(
291 RTI_LOG_BIT_EXCEPTION,
294 "unknown exception");
300 rtiboost::shared_ptr<StorageWriter> storage_writer_;
306 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_