diff --git a/ddsrecorder/src/cpp/command_receiver/CommandReceiver.cpp b/ddsrecorder/src/cpp/command_receiver/CommandReceiver.cpp index a282e74cc..2cb670873 100644 --- a/ddsrecorder/src/cpp/command_receiver/CommandReceiver.cpp +++ b/ddsrecorder/src/cpp/command_receiver/CommandReceiver.cpp @@ -59,6 +59,7 @@ CommandReceiver::CommandReceiver( , event_handler_(event_handler) , participant_configuration_(participant_configuration) { + registerDdsRecorderCommandTypes(); registerDdsRecorderStatusTypes(); } diff --git a/ddsrecorder/src/cpp/command_receiver/CommandReceiver.hpp b/ddsrecorder/src/cpp/command_receiver/CommandReceiver.hpp index 0640804e1..3b41a14cd 100644 --- a/ddsrecorder/src/cpp/command_receiver/CommandReceiver.hpp +++ b/ddsrecorder/src/cpp/command_receiver/CommandReceiver.hpp @@ -36,6 +36,7 @@ #include #include "types/DdsRecorderCommand/DdsRecorderCommandPubSubTypes.h" +#include "types/DdsRecorderCommand/DdsRecorderCommandTypeObject.h" #include "types/DdsRecorderStatus/DdsRecorderStatusPubSubTypes.h" #include "types/DdsRecorderStatus/DdsRecorderStatusTypeObject.h" diff --git a/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.cxx b/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.cxx new file mode 100644 index 000000000..9bea321d5 --- /dev/null +++ b/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.cxx @@ -0,0 +1,255 @@ +// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima). +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/*! + * @file DdsRecorderCommandTypeObject.cpp + * This source file contains the definition of the described types in the IDL file. + * + * This file was generated by the tool gen. + */ + +#ifdef _WIN32 +// Remove linker warning LNK4221 on Visual Studio +namespace { char dummy; } +#endif + +#include "DdsRecorderCommand.h" +#include "DdsRecorderCommandTypeObject.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace eprosima::fastrtps::rtps; + +void registerDdsRecorderCommandTypes() +{ + static std::once_flag once_flag; + std::call_once(once_flag, []() + { + TypeObjectFactory *factory = TypeObjectFactory::get_instance(); + factory->add_type_object("DdsRecorderCommand", GetDdsRecorderCommandIdentifier(true), + GetDdsRecorderCommandObject(true)); + factory->add_type_object("DdsRecorderCommand", GetDdsRecorderCommandIdentifier(false), + GetDdsRecorderCommandObject(false)); + + }); +} + +const TypeIdentifier* GetDdsRecorderCommandIdentifier(bool complete) +{ + const TypeIdentifier * c_identifier = TypeObjectFactory::get_instance()->get_type_identifier("DdsRecorderCommand", complete); + if (c_identifier != nullptr && (!complete || c_identifier->_d() == EK_COMPLETE)) + { + return c_identifier; + } + + GetDdsRecorderCommandObject(complete); // Generated inside + return TypeObjectFactory::get_instance()->get_type_identifier("DdsRecorderCommand", complete); +} + +const TypeObject* GetDdsRecorderCommandObject(bool complete) +{ + const TypeObject* c_type_object = TypeObjectFactory::get_instance()->get_type_object("DdsRecorderCommand", complete); + if (c_type_object != nullptr) + { + return c_type_object; + } + else if (complete) + { + return GetCompleteDdsRecorderCommandObject(); + } + //else + return GetMinimalDdsRecorderCommandObject(); +} + +const TypeObject* GetMinimalDdsRecorderCommandObject() +{ + const TypeObject* c_type_object = TypeObjectFactory::get_instance()->get_type_object("DdsRecorderCommand", false); + if (c_type_object != nullptr) + { + return c_type_object; + } + + TypeObject *type_object = new TypeObject(); + type_object->_d(EK_MINIMAL); + type_object->minimal()._d(TK_STRUCTURE); + + type_object->minimal().struct_type().struct_flags().IS_FINAL(false); + type_object->minimal().struct_type().struct_flags().IS_APPENDABLE(false); + type_object->minimal().struct_type().struct_flags().IS_MUTABLE(false); + type_object->minimal().struct_type().struct_flags().IS_NESTED(false); + type_object->minimal().struct_type().struct_flags().IS_AUTOID_HASH(false); // Unsupported + + MemberId memberId = 0; + MinimalStructMember mst_command; + mst_command.common().member_id(memberId++); + mst_command.common().member_flags().TRY_CONSTRUCT1(false); // Unsupported + mst_command.common().member_flags().TRY_CONSTRUCT2(false); // Unsupported + mst_command.common().member_flags().IS_EXTERNAL(false); // Unsupported + mst_command.common().member_flags().IS_OPTIONAL(false); + mst_command.common().member_flags().IS_MUST_UNDERSTAND(false); + mst_command.common().member_flags().IS_KEY(false); + mst_command.common().member_flags().IS_DEFAULT(false); // Doesn't apply + mst_command.common().member_type_id(*TypeObjectFactory::get_instance()->get_string_identifier(255, false)); + + + MD5 command_hash("command"); + for(int i = 0; i < 4; ++i) + { + mst_command.detail().name_hash()[i] = command_hash.digest[i]; + } + type_object->minimal().struct_type().member_seq().emplace_back(mst_command); + + MinimalStructMember mst_args; + mst_args.common().member_id(memberId++); + mst_args.common().member_flags().TRY_CONSTRUCT1(false); // Unsupported + mst_args.common().member_flags().TRY_CONSTRUCT2(false); // Unsupported + mst_args.common().member_flags().IS_EXTERNAL(false); // Unsupported + mst_args.common().member_flags().IS_OPTIONAL(false); + mst_args.common().member_flags().IS_MUST_UNDERSTAND(false); + mst_args.common().member_flags().IS_KEY(false); + mst_args.common().member_flags().IS_DEFAULT(false); // Doesn't apply + mst_args.common().member_type_id(*TypeObjectFactory::get_instance()->get_string_identifier(255, false)); + + + MD5 args_hash("args"); + for(int i = 0; i < 4; ++i) + { + mst_args.detail().name_hash()[i] = args_hash.digest[i]; + } + type_object->minimal().struct_type().member_seq().emplace_back(mst_args); + + + // Header + // TODO Inheritance + //type_object->minimal().struct_type().header().base_type()._d(EK_MINIMAL); + //type_object->minimal().struct_type().header().base_type().equivalence_hash()[0..13]; + + TypeIdentifier identifier; + identifier._d(EK_MINIMAL); + + SerializedPayload_t payload(static_cast( + MinimalStructType::getCdrSerializedSize(type_object->minimal().struct_type()) + 4)); + eprosima::fastcdr::FastBuffer fastbuffer((char*) payload.data, payload.max_size); + // Fixed endian (Page 221, EquivalenceHash definition of Extensible and Dynamic Topic Types for DDS document) + eprosima::fastcdr::Cdr ser( + fastbuffer, eprosima::fastcdr::Cdr::LITTLE_ENDIANNESS, + eprosima::fastcdr::Cdr::DDS_CDR); // Object that serializes the data. + payload.encapsulation = CDR_LE; + + type_object->serialize(ser); + payload.length = (uint32_t)ser.getSerializedDataLength(); //Get the serialized length + MD5 objectHash; + objectHash.update((char*)payload.data, payload.length); + objectHash.finalize(); + for(int i = 0; i < 14; ++i) + { + identifier.equivalence_hash()[i] = objectHash.digest[i]; + } + + TypeObjectFactory::get_instance()->add_type_object("DdsRecorderCommand", &identifier, type_object); + delete type_object; + return TypeObjectFactory::get_instance()->get_type_object("DdsRecorderCommand", false); +} + +const TypeObject* GetCompleteDdsRecorderCommandObject() +{ + const TypeObject* c_type_object = TypeObjectFactory::get_instance()->get_type_object("DdsRecorderCommand", true); + if (c_type_object != nullptr && c_type_object->_d() == EK_COMPLETE) + { + return c_type_object; + } + + TypeObject *type_object = new TypeObject(); + type_object->_d(EK_COMPLETE); + type_object->complete()._d(TK_STRUCTURE); + + type_object->complete().struct_type().struct_flags().IS_FINAL(false); + type_object->complete().struct_type().struct_flags().IS_APPENDABLE(false); + type_object->complete().struct_type().struct_flags().IS_MUTABLE(false); + type_object->complete().struct_type().struct_flags().IS_NESTED(false); + type_object->complete().struct_type().struct_flags().IS_AUTOID_HASH(false); // Unsupported + + MemberId memberId = 0; + CompleteStructMember cst_command; + cst_command.common().member_id(memberId++); + cst_command.common().member_flags().TRY_CONSTRUCT1(false); // Unsupported + cst_command.common().member_flags().TRY_CONSTRUCT2(false); // Unsupported + cst_command.common().member_flags().IS_EXTERNAL(false); // Unsupported + cst_command.common().member_flags().IS_OPTIONAL(false); + cst_command.common().member_flags().IS_MUST_UNDERSTAND(false); + cst_command.common().member_flags().IS_KEY(false); + cst_command.common().member_flags().IS_DEFAULT(false); // Doesn't apply + cst_command.common().member_type_id(*TypeObjectFactory::get_instance()->get_string_identifier(255, false)); + + + cst_command.detail().name("command"); + + type_object->complete().struct_type().member_seq().emplace_back(cst_command); + + CompleteStructMember cst_args; + cst_args.common().member_id(memberId++); + cst_args.common().member_flags().TRY_CONSTRUCT1(false); // Unsupported + cst_args.common().member_flags().TRY_CONSTRUCT2(false); // Unsupported + cst_args.common().member_flags().IS_EXTERNAL(false); // Unsupported + cst_args.common().member_flags().IS_OPTIONAL(false); + cst_args.common().member_flags().IS_MUST_UNDERSTAND(false); + cst_args.common().member_flags().IS_KEY(false); + cst_args.common().member_flags().IS_DEFAULT(false); // Doesn't apply + cst_args.common().member_type_id(*TypeObjectFactory::get_instance()->get_string_identifier(255, false)); + + + cst_args.detail().name("args"); + + type_object->complete().struct_type().member_seq().emplace_back(cst_args); + + + // Header + type_object->complete().struct_type().header().detail().type_name("DdsRecorderCommand"); + // TODO inheritance + + + TypeIdentifier identifier; + identifier._d(EK_COMPLETE); + + SerializedPayload_t payload(static_cast( + CompleteStructType::getCdrSerializedSize(type_object->complete().struct_type()) + 4)); + eprosima::fastcdr::FastBuffer fastbuffer((char*) payload.data, payload.max_size); + // Fixed endian (Page 221, EquivalenceHash definition of Extensible and Dynamic Topic Types for DDS document) + eprosima::fastcdr::Cdr ser( + fastbuffer, eprosima::fastcdr::Cdr::LITTLE_ENDIANNESS, + eprosima::fastcdr::Cdr::DDS_CDR); // Object that serializes the data. + payload.encapsulation = CDR_LE; + + type_object->serialize(ser); + payload.length = (uint32_t)ser.getSerializedDataLength(); //Get the serialized length + MD5 objectHash; + objectHash.update((char*)payload.data, payload.length); + objectHash.finalize(); + for(int i = 0; i < 14; ++i) + { + identifier.equivalence_hash()[i] = objectHash.digest[i]; + } + + TypeObjectFactory::get_instance()->add_type_object("DdsRecorderCommand", &identifier, type_object); + delete type_object; + return TypeObjectFactory::get_instance()->get_type_object("DdsRecorderCommand", true); +} diff --git a/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.h b/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.h new file mode 100644 index 000000000..e91a27f69 --- /dev/null +++ b/ddsrecorder/src/cpp/command_receiver/types/DdsRecorderCommand/DdsRecorderCommandTypeObject.h @@ -0,0 +1,63 @@ +// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima). +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/*! + * @file DdsRecorderCommandTypeObject.h + * This header file contains the declaration of the described types in the IDL file. + * + * This file was generated by the tool gen. + */ + +#ifndef _FAST_DDS_GENERATED_DDSRECORDERCOMMAND_TYPE_OBJECT_H_ +#define _FAST_DDS_GENERATED_DDSRECORDERCOMMAND_TYPE_OBJECT_H_ + + +#include +#include + +#if defined(_WIN32) +#if defined(EPROSIMA_USER_DLL_EXPORT) +#define eProsima_user_DllExport __declspec( dllexport ) +#else +#define eProsima_user_DllExport +#endif +#else +#define eProsima_user_DllExport +#endif + +#if defined(_WIN32) +#if defined(EPROSIMA_USER_DLL_EXPORT) +#if defined(DdsRecorderCommand_SOURCE) +#define DdsRecorderCommand_DllAPI __declspec( dllexport ) +#else +#define DdsRecorderCommand_DllAPI __declspec( dllimport ) +#endif // DdsRecorderCommand_SOURCE +#else +#define DdsRecorderCommand_DllAPI +#endif +#else +#define DdsRecorderCommand_DllAPI +#endif // _WIN32 + +using namespace eprosima::fastrtps::types; + +eProsima_user_DllExport void registerDdsRecorderCommandTypes(); + +eProsima_user_DllExport const TypeIdentifier* GetDdsRecorderCommandIdentifier(bool complete = false); +eProsima_user_DllExport const TypeObject* GetDdsRecorderCommandObject(bool complete = false); +eProsima_user_DllExport const TypeObject* GetMinimalDdsRecorderCommandObject(); +eProsima_user_DllExport const TypeObject* GetCompleteDdsRecorderCommandObject(); + + +#endif // _FAST_DDS_GENERATED_DDSRECORDERCOMMAND_TYPE_OBJECT_H_ \ No newline at end of file