#ifndef REMOTING_HOST_WIN_RDP_DESKTOP_SESSION_H_
#define REMOTING_HOST_WIN_RDP_DESKTOP_SESSION_H_
#include <wrl/client.h>
#include <memory>
#include "base/win/atl.h"
#include "remoting/host/win/chromoting_lib.h"
#include "remoting/host/win/rdp_client.h"
namespace remoting {
class __declspec(uuid(RDP_DESKTOP_SESSION_CLSID)) RdpDesktopSession
: public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>,
public ATL::CComCoClass<RdpDesktopSession, &__uuidof(RdpDesktopSession)>,
public IRdpDesktopSession,
public RdpClient::EventHandler {
public:
typedef ATL::CComCreator<ATL::CComObjectNoLock<ATL::CComClassFactory>>
_ClassFactoryCreatorClass;
RdpDesktopSession();
~RdpDesktopSession() override;
STDMETHOD(Connect)
(long width,
long height,
long dpi_x,
long dpi_y,
BSTR terminal_id,
DWORD port_number,
IRdpDesktopSessionEventHandler* event_handler) override;
STDMETHOD(Disconnect)() override;
STDMETHOD(ChangeResolution)
(long width, long height, long dpi_x, long dpi_y) override;
STDMETHOD(InjectSas)() override;
DECLARE_NO_REGISTRY()
private:
void OnRdpConnected() override;
void OnRdpClosed() override;
BEGIN_COM_MAP(RdpDesktopSession)
COM_INTERFACE_ENTRY(IRdpDesktopSession)
COM_INTERFACE_ENTRY(IUnknown)
END_COM_MAP()
std::unique_ptr<RdpClient> client_;
Microsoft::WRL::ComPtr<IRdpDesktopSessionEventHandler> event_handler_;
DECLARE_PROTECT_FINAL_CONSTRUCT()
};
}
#endif