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(
74 RTILog_printContextAndMsg(
81 static RTI_RecordingServiceStorageStreamWriter * create_stream_writer_fwd(
83 const RTI_RoutingServiceStreamInfo *native_stream_info,
84 const RTI_RoutingServiceProperties *native_properties)
86 RTIBOOST_ASSERT(!rti::recording::is_discovery_stream(
87 std::string(native_stream_info->stream_name)));
89 StorageWriterForwarder *forwarder =
90 static_cast<StorageWriterForwarder *
>(storage_writer);
91 rti::routing::StreamInfo stream_info(*native_stream_info);
92 rti::routing::PropertySet properties;
93 rti::routing::PropertyAdapter::add_properties_from_native(
96 StorageStreamWriterForwarder *stream_writer_forwarder =
97 new StorageStreamWriterForwarder(
98 forwarder->storage_writer_->create_stream_writer(
101 forwarder->storage_writer_.get());
102 return stream_writer_forwarder;
103 }
catch (
const std::exception& ex) {
104 RTILog_printContextAndMsg(
109 RTILog_printContextAndMsg(
112 "unknown exception");
117 static RTI_RecordingServiceStorageParticipantWriter *
118 create_participant_writer_fwd(
void *storage_writer)
121 StorageWriterForwarder *forwarder =
122 static_cast<StorageWriterForwarder *
>(storage_writer);
123 StorageParticipantWriterForwarder *stream_writer_forwarder =
124 new StorageParticipantWriterForwarder(
125 forwarder->storage_writer_->create_participant_writer(),
126 forwarder->storage_writer_.get());
127 return stream_writer_forwarder;
128 }
catch (
const std::exception& ex) {
129 RTILog_printContextAndMsg(
134 RTILog_printContextAndMsg(
137 "unknown exception");
142 static RTI_RecordingServiceStoragePublicationWriter *
143 create_publication_writer_fwd(
void *storage_writer)
146 StorageWriterForwarder *forwarder =
147 static_cast<StorageWriterForwarder *
>(storage_writer);
148 StoragePublicationWriterForwarder *stream_writer_forwarder =
149 new StoragePublicationWriterForwarder(
150 forwarder->storage_writer_->create_publication_writer(),
151 forwarder->storage_writer_.get());
152 return stream_writer_forwarder;
153 }
catch (
const std::exception& ex) {
154 RTILog_printContextAndMsg(
159 RTILog_printContextAndMsg(
162 "unknown exception");
167 static RTI_RecordingServiceStorageSubscriptionWriter *
168 create_subscription_writer_fwd(
void *storage_writer)
171 StorageWriterForwarder *forwarder =
172 static_cast<StorageWriterForwarder *
>(storage_writer);
173 StorageSubscriptionWriterForwarder *stream_writer_forwarder =
174 new StorageSubscriptionWriterForwarder(
175 forwarder->storage_writer_->create_subscription_writer(),
176 forwarder->storage_writer_.get());
177 return stream_writer_forwarder;
178 }
catch (
const std::exception& ex) {
179 RTILog_printContextAndMsg(
184 RTILog_printContextAndMsg(
187 "unknown exception");
192 static void delete_stream_writer_fwd(
194 RTI_RecordingServiceStorageStreamWriter *storage_stream_writer)
197 StorageStreamWriterForwarder *stream_writer_forwarder =
198 static_cast<StorageStreamWriterForwarder *
>(
199 storage_stream_writer);
200 delete stream_writer_forwarder;
201 }
catch (
const std::exception& ex) {
202 RTILog_printContextAndMsg(
207 RTILog_printContextAndMsg(
210 "unknown exception");
214 static void delete_participant_writer_fwd(
216 RTI_RecordingServiceStorageParticipantWriter *stream_writer)
219 StorageParticipantWriterForwarder *forwarder =
220 static_cast<StorageParticipantWriterForwarder *
>(
223 }
catch (
const std::exception& ex) {
224 RTILog_printContextAndMsg(
229 RTILog_printContextAndMsg(
232 "unknown exception");
236 static void delete_publication_writer_fwd(
238 RTI_RecordingServiceStoragePublicationWriter *stream_writer)
241 StoragePublicationWriterForwarder *forwarder =
242 static_cast<StoragePublicationWriterForwarder *
>(
245 }
catch (
const std::exception& ex) {
246 RTILog_printContextAndMsg(
251 RTILog_printContextAndMsg(
254 "unknown exception");
258 static void delete_subscription_writer_fwd(
260 RTI_RecordingServiceStorageSubscriptionWriter *stream_writer)
263 StorageSubscriptionWriterForwarder *forwarder =
264 static_cast<StorageSubscriptionWriterForwarder *
>(
267 }
catch (
const std::exception& ex) {
268 RTILog_printContextAndMsg(
273 RTILog_printContextAndMsg(
276 "unknown exception");
282 rtiboost::shared_ptr<StorageWriter> storage_writer_;
288 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_