176 lines
4.6 KiB
C
176 lines
4.6 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1995
|
||
|
//
|
||
|
// File: machine.h
|
||
|
//
|
||
|
// Contents: IConnectedMachine class definition
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
//****************************************************************************
|
||
|
//
|
||
|
// Forward declarations
|
||
|
//
|
||
|
//****************************************************************************
|
||
|
|
||
|
class CMTScript;
|
||
|
class CScriptHost;
|
||
|
|
||
|
//****************************************************************************
|
||
|
//
|
||
|
// Classes
|
||
|
//
|
||
|
//****************************************************************************
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CMachine (cm)
|
||
|
//
|
||
|
// Purpose: Contains all useful info about a machine and what it's
|
||
|
// doing.
|
||
|
//
|
||
|
// Notes: This class is manipulated from multiple threads. All
|
||
|
// member functions must be thread safe!
|
||
|
//
|
||
|
// This is the class that is created by the class factory and
|
||
|
// handed out as a remote object to other machines. It has no
|
||
|
// real code in itself but merely provides a way to talk to the
|
||
|
// already running script engines.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
class CMachine : public CThreadComm,
|
||
|
public IConnectedMachine,
|
||
|
public IConnectionPointContainer
|
||
|
{
|
||
|
friend class CMachConnectPoint;
|
||
|
|
||
|
public:
|
||
|
DECLARE_MEMCLEAR_NEW_DELETE();
|
||
|
|
||
|
CMachine(CMTScript *pMT, ITypeInfo *pTIMachine);
|
||
|
~CMachine();
|
||
|
|
||
|
DECLARE_STANDARD_IUNKNOWN(CMachine);
|
||
|
|
||
|
// IDispatch interface
|
||
|
|
||
|
STDMETHOD(GetTypeInfoCount)(UINT FAR* pctinfo);
|
||
|
|
||
|
STDMETHOD(GetTypeInfo)(
|
||
|
UINT itinfo,
|
||
|
LCID lcid,
|
||
|
ITypeInfo FAR* FAR* pptinfo);
|
||
|
|
||
|
STDMETHOD(GetIDsOfNames)(
|
||
|
REFIID riid,
|
||
|
OLECHAR FAR* FAR* rgszNames,
|
||
|
UINT cNames,
|
||
|
LCID lcid,
|
||
|
DISPID FAR* rgdispid);
|
||
|
|
||
|
STDMETHOD(Invoke)(
|
||
|
DISPID dispidMember,
|
||
|
REFIID riid,
|
||
|
LCID lcid,
|
||
|
WORD wFlags,
|
||
|
DISPPARAMS FAR* pdispparams,
|
||
|
VARIANT FAR* pvarResult,
|
||
|
EXCEPINFO FAR* pexcepinfo,
|
||
|
UINT FAR* puArgErr);
|
||
|
|
||
|
// IConnectionPointContainer methods
|
||
|
|
||
|
STDMETHOD(EnumConnectionPoints)(LPENUMCONNECTIONPOINTS*);
|
||
|
STDMETHOD(FindConnectionPoint)(REFIID, LPCONNECTIONPOINT*);
|
||
|
|
||
|
// IConnectedMachine interface
|
||
|
|
||
|
STDMETHOD(Exec)(BSTR bstrCmd, BSTR bstrParams, VARIANT *pvData);
|
||
|
|
||
|
STDMETHOD(get_PublicData)(VARIANT *pvData);
|
||
|
STDMETHOD(get_Name)(BSTR *pbstrName);
|
||
|
STDMETHOD(get_Platform)(BSTR *pbstrPlat);
|
||
|
STDMETHOD(get_OS)(BSTR *pbstrOS);
|
||
|
STDMETHOD(get_MajorVer)(long *plMajorVer);
|
||
|
STDMETHOD(get_MinorVer)(long *plMinorVer);
|
||
|
STDMETHOD(get_BuildNum)(long *plBuildNum);
|
||
|
STDMETHOD(get_PlatformIsNT)(VARIANT_BOOL *pfIsNT);
|
||
|
STDMETHOD(get_ServicePack)(BSTR *pbstrSP);
|
||
|
STDMETHOD(get_HostMajorVer)(long *plMajorVer);
|
||
|
STDMETHOD(get_HostMinorVer)(long *plMajorVer);
|
||
|
STDMETHOD(get_StatusValue)(long nIndex, long *pnStatus);
|
||
|
|
||
|
HRESULT FireScriptNotify(BSTR bstrIdent, VARIANT vInfoF);
|
||
|
|
||
|
#define LOCK_MACH_LOCALS(pObj) CMachLock local_lock(pObj);
|
||
|
|
||
|
protected:
|
||
|
virtual BOOL Init();
|
||
|
virtual DWORD ThreadMain();
|
||
|
|
||
|
BOOL HandleThreadMessage();
|
||
|
|
||
|
private:
|
||
|
class CMachLock
|
||
|
{
|
||
|
public:
|
||
|
CMachLock(CMachine *pThis);
|
||
|
~CMachLock();
|
||
|
|
||
|
private:
|
||
|
CMachine *_pThis;
|
||
|
};
|
||
|
friend class CMachLock;
|
||
|
|
||
|
CMTScript * _pMT;
|
||
|
ITypeInfo * _pTypeInfoIMachine;
|
||
|
|
||
|
CRITICAL_SECTION _cs;
|
||
|
CStackPtrAry<IDispatch*, 5> _aryDispSink;
|
||
|
};
|
||
|
|
||
|
inline
|
||
|
CMachine::CMachLock::CMachLock(CMachine *pThis)
|
||
|
: _pThis(pThis)
|
||
|
{
|
||
|
EnterCriticalSection(&_pThis->_cs);
|
||
|
}
|
||
|
|
||
|
inline
|
||
|
CMachine::CMachLock::~CMachLock()
|
||
|
{
|
||
|
LeaveCriticalSection(&_pThis->_cs);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CMachConnectPoint (mcp)
|
||
|
//
|
||
|
// Purpose: Implements IConnectionPoint for CMachine
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
class CMachConnectPoint : public IConnectionPoint
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CMachConnectPoint(CMachine *pMach);
|
||
|
~CMachConnectPoint();
|
||
|
|
||
|
DECLARE_STANDARD_IUNKNOWN(CMachConnectPoint);
|
||
|
|
||
|
STDMETHOD(GetConnectionInterface)(IID * pIID);
|
||
|
STDMETHOD(GetConnectionPointContainer)(IConnectionPointContainer ** ppCPC);
|
||
|
STDMETHOD(Advise)(LPUNKNOWN pUnkSink, DWORD * pdwCookie);
|
||
|
STDMETHOD(Unadvise)(DWORD dwCookie);
|
||
|
STDMETHOD(EnumConnections)(LPENUMCONNECTIONS * ppEnum);
|
||
|
|
||
|
CMachine *_pMachine;
|
||
|
};
|
||
|
|