#pragma once /* ABSTRACT DEVICE COMPONENTS LIBRARY */ #include namespace adc { template class AdcNetServiceInterface : public IOImplT { protected: AdcNetServiceInterface::socket _socket; template AdcNetServiceInterface(AdcNetServiceInterface::socket&& sock, IOImplCtorArgTs&&... args) : IOImplT(std::forward(args)...), _socket(sock) { } public: using typename IOImplT::endpoint; using typename IOImplT::socket; virtual ~AdcNetServiceInterface() = default; /* asynchronuos operations */ // open connection template auto asyncConnect(AdcNetServiceInterface::endpoint&& end_point, ArgTs&&... args) { return IOImplT::asyncConnect(end_point); } template auto asyncSend(const NetMessageT& msg, ArgTs&&... args) { } template auto asyncReceive(ArgTs&&... args) { } /* blocking operations */ template auto connect(const AdcNetServiceInterface::endpoint& end_point, ArgTs&&... args) { } template auto send(const NetMessageT& msg, ArgTs&&... args) { } template NetMessageT receive(ArgTs&&... args) { } template auto close(ArgTs&&... args) { } }; } // namespace adc