c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync/* $Id$ */
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync/** @file
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * Header file for the VirtualBoxClient (IVirtualBoxClient) class, VBoxC.
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync */
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync/*
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync * Copyright (C) 2010-2014 Oracle Corporation
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync *
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * available from http://www.virtualbox.org. This file is free software;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * you can redistribute it and/or modify it under the terms of the GNU
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * General Public License (GPL) as published by the Free Software
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync */
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#ifndef ____H_VIRTUALBOXCLIENTIMPL
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#define ____H_VIRTUALBOXCLIENTIMPL
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync#include "VirtualBoxClientWrap.h"
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#include "EventImpl.h"
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
57a6e7347196197252bf6ab9ce5d7d3f6a1aafd3vboxsync#ifdef RT_OS_WINDOWS
57a6e7347196197252bf6ab9ce5d7d3f6a1aafd3vboxsync# include "win/resource.h"
57a6e7347196197252bf6ab9ce5d7d3f6a1aafd3vboxsync#endif
57a6e7347196197252bf6ab9ce5d7d3f6a1aafd3vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsyncclass ATL_NO_VTABLE VirtualBoxClient :
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync public VirtualBoxClientWrap
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#ifdef RT_OS_WINDOWS
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync , public CComCoClass<VirtualBoxClient, &CLSID_VirtualBoxClient>
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#endif
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync{
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsyncpublic:
653f2468d7c3c1d14cb962417e840d441aca7257vboxsync DECLARE_CLASSFACTORY()
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
57a6e7347196197252bf6ab9ce5d7d3f6a1aafd3vboxsync DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync DECLARE_NOT_AGGREGATABLE(VirtualBoxClient)
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync HRESULT FinalConstruct();
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync void FinalRelease();
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync // public initializer/uninitializer for internal purposes only
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync HRESULT init();
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync void uninit();
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsyncprivate:
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync // wrapped IVirtualBoxClient properties
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync virtual HRESULT getVirtualBox(ComPtr<IVirtualBox> &aVirtualBox);
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync virtual HRESULT getSession(ComPtr<ISession> &aSession);
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync virtual HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync // wrapped IVirtualBoxClient methods
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync virtual HRESULT checkMachineError(const ComPtr<IMachine> &aMachine);
670515410f8bfcc1248752473f344e7bce2fb12bvboxsync
653f2468d7c3c1d14cb962417e840d441aca7257vboxsync /** Instance counter for simulating something similar to a singleton.
653f2468d7c3c1d14cb962417e840d441aca7257vboxsync * Only the first instance will be a usable object, all additional
653f2468d7c3c1d14cb962417e840d441aca7257vboxsync * instances will return a failure at creation time and will not work. */
653f2468d7c3c1d14cb962417e840d441aca7257vboxsync static uint32_t g_cInstances;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync static DECLCALLBACK(int) SVCWatcherThread(RTTHREAD ThreadSelf, void *pvUser);
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync struct Data
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync {
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync Data()
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync {}
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
1d4505464a0a7d7d91227d55871ca7a0ab65aeb5vboxsync ComPtr<IVirtualBox> m_pVirtualBox;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync const ComObjPtr<EventSource> m_pEventSource;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync RTTHREAD m_ThreadWatcher;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync RTSEMEVENT m_SemEvWatcher;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync };
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync Data mData;
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync};
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync#endif // ____H_VIRTUALBOXCLIENTIMPL
c6e0905a5f2b95eaf3b7cc4dd054cce617b3f498vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */