Program Listing for File marshall_object.h#
↰ Return to documentation for file (ipc_com\marshall_object.h)
#ifndef MARSHALL_OBJECT_H
#define MARSHALL_OBJECT_H
#include <interfaces/ipc.h>
#include <support/component_impl.h>
#include <support/interface_ptr.h>
#include <interfaces/core_ps.h>
// Forward declarations
class CCommunicationControl;
class CChannelConnector;
inline sdv::process::TProcessID GetProcessID()
{
static sdv::process::TProcessID tProcessID = 0;
if (!tProcessID)
{
const sdv::process::IProcessInfo* pProcessInfo = sdv::core::GetObject<sdv::process::IProcessInfo>("ProcessControlService");
if (!pProcessInfo) return 0;
tProcessID = pProcessInfo->GetProcessID();
}
return tProcessID;
}
class CMarshallObject : public sdv::ps::IMarshall
{
public:
CMarshallObject(CCommunicationControl& rcontrol);
~CMarshallObject();
bool IsValid() const;
void Reset();
sdv::interface_t InitializeAsProxy(uint32_t uiProxyIndex, sdv::interface_id id, sdv::ps::TMarshallID tStubID,
CChannelConnector& rConnector);
bool InitializeAsStub(uint32_t uiStubIndex, sdv::interface_t ifc);
sdv::ps::TMarshallID GetMarshallID() const;
sdv::interface_t GetProxy();
virtual sdv::sequence<sdv::pointer<uint8_t>> Call(/*inout*/ sdv::sequence<sdv::pointer<uint8_t>>& seqInputData) override;
private:
enum class EType {unknown, proxy, stub};
CCommunicationControl& m_rcontrol;
EType m_eType = EType::unknown;
sdv::ps::TMarshallID m_tMarshallID = {};
sdv::ps::IMarshall* m_pMarshall = nullptr;
sdv::TObjectPtr m_ptrMarshallObject;
sdv::ps::TMarshallID m_tStubID = {};
sdv::interface_t m_ifcProxy = {};
CChannelConnector* m_pConnector = nullptr;
};
#endif // !defined MARSHALL_OBJECT_H