Program Listing for File com_channel.h#
↰ Return to documentation for file (ipc_com\com_channel.h)
#ifndef COM_CHANNEL_H
#define COM_CHANNEL_H
#include <support/pssup.h>
#include <interfaces/ipc.h>
#include "../../global/scheduler/scheduler.h"
// Forward declaration
class CCommunicationControl;
class CMarshallObject;
class CChannelConnector : public sdv::IInterfaceAccess, public sdv::ipc::IConnectEventCallback,
public sdv::ipc::IDataReceiveCallback
{
public:
CChannelConnector(CCommunicationControl& rcontrol, uint32_t uiIndex, sdv::IInterfaceAccess* pChannelEndpoint);
~CChannelConnector();
// Interface map
BEGIN_SDV_INTERFACE_MAP()
SDV_INTERFACE_ENTRY(sdv::ipc::IDataReceiveCallback)
SDV_INTERFACE_ENTRY(sdv::ipc::IConnectEventCallback)
END_SDV_INTERFACE_MAP()
bool ServerConnect(sdv::IInterfaceAccess* pObject, bool bAllowReconnect);
sdv::IInterfaceAccess* ClientConnect(uint32_t uiTimeoutMs);
bool IsConnected() const;
virtual void SetStatus(/*in*/ sdv::ipc::EConnectStatus eConnectStatus) override;
virtual void ReceiveData(/*inout*/ sdv::sequence<sdv::pointer<uint8_t>>& seqData) override;
void DecoupledReceiveData(/*inout*/ sdv::sequence<sdv::pointer<uint8_t>>& seqData);
sdv::sequence<sdv::pointer<uint8_t>> MakeCall(sdv::ps::TMarshallID tProxyID, sdv::ps::TMarshallID tStubID,
sdv::sequence<sdv::pointer<uint8_t>>& rseqInputData);
std::shared_ptr<CMarshallObject> GetOrCreateProxy(sdv::interface_id id, sdv::ps::TMarshallID tStubID);
sdv::com::TConnectionID GetConnectionID() const;
private:
enum class EEndpointType {server, client};
struct SCallEntry
{
sdv::sequence<sdv::pointer<uint8_t>> seqResult;
std::mutex mtxWaitForResult;
std::condition_variable cvWaitForResult;
bool bCancel = false;
};
CCommunicationControl& m_rcontrol;
sdv::TObjectPtr m_ptrChannelEndpoint;
uint64_t m_uiConnectionStatusCookie = 0;
std::shared_ptr<CMarshallObject> m_ptrInitialMarshallObject;
sdv::ipc::EConnectStatus m_eConnectStatus = sdv::ipc::EConnectStatus::uninitialized;
bool m_bAllowReconnect = false;
EEndpointType m_eEndpointType = EEndpointType::client;
std::recursive_mutex m_mtxMarshallObjects;
std::map<sdv::ps::TMarshallID, std::shared_ptr<CMarshallObject>> m_mapProxyObjects;
sdv::com::TConnectionID m_tConnectionID{};
sdv::ipc::IDataSend* m_pDataSend = nullptr;
std::mutex m_mtxCalls;
std::map<uint64_t, SCallEntry&> m_mapCalls;
CTaskScheduler m_scheduler;
};
#endif // !defined COM_CHANNEL_H