| 1 | /* $Id: apartment.h,v 1.1 2000-04-27 22:21:35 davidr Exp $ */
|
|---|
| 2 | /*
|
|---|
| 3 | *
|
|---|
| 4 | * Project Odin Software License can be found in LICENSE.TXT
|
|---|
| 5 | *
|
|---|
| 6 | */
|
|---|
| 7 |
|
|---|
| 8 | #ifndef APARTMENT_INCLUDED
|
|---|
| 9 | #define APARTMENT_INCLUDED 1
|
|---|
| 10 |
|
|---|
| 11 | class Apartment;
|
|---|
| 12 |
|
|---|
| 13 | class ObjectContext;
|
|---|
| 14 |
|
|---|
| 15 | // ----------------------------------------------------------------------
|
|---|
| 16 | //
|
|---|
| 17 | // ----------------------------------------------------------------------
|
|---|
| 18 | enum enAptType
|
|---|
| 19 | {
|
|---|
| 20 | APT_TN = 0,
|
|---|
| 21 | APT_MT = 1,
|
|---|
| 22 | APT_ST = 2,
|
|---|
| 23 | APT_MAIN = 3,
|
|---|
| 24 | APT_HOST = 4
|
|---|
| 25 | };
|
|---|
| 26 |
|
|---|
| 27 | enum enThreadingModel
|
|---|
| 28 | {
|
|---|
| 29 | THM_UNDEFINED = 0,
|
|---|
| 30 | THM_APARTMENT,
|
|---|
| 31 | THM_FREE,
|
|---|
| 32 | THM_BOTH,
|
|---|
| 33 | THM_NEUTRAL
|
|---|
| 34 | };
|
|---|
| 35 |
|
|---|
| 36 | // ----------------------------------------------------------------------
|
|---|
| 37 | // Attributes associated with an object...
|
|---|
| 38 | // ----------------------------------------------------------------------
|
|---|
| 39 | class Attributes
|
|---|
| 40 | {
|
|---|
| 41 | public:
|
|---|
| 42 | enThreadingModel GetThreadingModel(void ) const
|
|---|
| 43 | { return m_ThreadingModel; }
|
|---|
| 44 |
|
|---|
| 45 | BOOL GetConfiguredComponent(void ) const
|
|---|
| 46 | { return m_fConfiguredComponent; }
|
|---|
| 47 |
|
|---|
| 48 | protected:
|
|---|
| 49 |
|
|---|
| 50 | private:
|
|---|
| 51 | enThreadingModel m_ThreadingModel;
|
|---|
| 52 | BOOL m_fConfiguredComponent;
|
|---|
| 53 |
|
|---|
| 54 | // Loads more stuff to do with COM+ object context to go here :-)
|
|---|
| 55 |
|
|---|
| 56 | };
|
|---|
| 57 |
|
|---|
| 58 | // ----------------------------------------------------------------------
|
|---|
| 59 | // COntext in which an object runs...
|
|---|
| 60 | // ----------------------------------------------------------------------
|
|---|
| 61 | class ObjectContext
|
|---|
| 62 | {
|
|---|
| 63 | private:
|
|---|
| 64 | GUID m_Guid;
|
|---|
| 65 | Apartment * m_pApt;
|
|---|
| 66 |
|
|---|
| 67 | // Loads more stuff to do with COM+ object context to go here :-)
|
|---|
| 68 |
|
|---|
| 69 | protected:
|
|---|
| 70 |
|
|---|
| 71 | public:
|
|---|
| 72 |
|
|---|
| 73 | ObjectContext();
|
|---|
| 74 |
|
|---|
| 75 | const GUID & GetGUID(void ) const // Object context GUID...
|
|---|
| 76 | { return m_Guid; }
|
|---|
| 77 |
|
|---|
| 78 | const Apartment * GetApt(void ) const // Associated apartment...
|
|---|
| 79 | { return m_pApt; }
|
|---|
| 80 |
|
|---|
| 81 | void SetApt(Apartment * const pApt)
|
|---|
| 82 | { m_pApt = pApt; }
|
|---|
| 83 |
|
|---|
| 84 | // Longhand methods...
|
|---|
| 85 | BOOL IsCompatible(Attributes * const pTarget) const;
|
|---|
| 86 | };
|
|---|
| 87 |
|
|---|
| 88 | // ----------------------------------------------------------------------
|
|---|
| 89 | // Class to represent an apartment.
|
|---|
| 90 | // Apartments have varing thread affinity dependant on their type.
|
|---|
| 91 | // ----------------------------------------------------------------------
|
|---|
| 92 | class Apartment
|
|---|
| 93 | {
|
|---|
| 94 | private:
|
|---|
| 95 | GUID m_Guid;
|
|---|
| 96 | ObjectContext * m_pDefaultContext;
|
|---|
| 97 | HWND m_hwndPump;
|
|---|
| 98 | enAptType m_AptType;
|
|---|
| 99 |
|
|---|
| 100 | protected:
|
|---|
| 101 |
|
|---|
| 102 | public:
|
|---|
| 103 |
|
|---|
| 104 | Apartment(enAptType aptType);
|
|---|
| 105 | virtual ~Apartment();
|
|---|
| 106 |
|
|---|
| 107 | enAptType GetAptType(void ) const
|
|---|
| 108 | { return m_AptType; }
|
|---|
| 109 |
|
|---|
| 110 | const GUID & GetGUID(void ) const
|
|---|
| 111 | { return m_Guid; }
|
|---|
| 112 |
|
|---|
| 113 | ObjectContext * const GetDefaultContext(void ) const
|
|---|
| 114 | { return m_pDefaultContext; }
|
|---|
| 115 |
|
|---|
| 116 | BOOL IsMessageBased(void ) const
|
|---|
| 117 | { return !((m_AptType == APT_MT) || (m_AptType == APT_TN)); }
|
|---|
| 118 |
|
|---|
| 119 | // Longhand methods...
|
|---|
| 120 | BOOL IsCompatible(Attributes * const pTarget) const;
|
|---|
| 121 | };
|
|---|
| 122 |
|
|---|
| 123 | // ----------------------------------------------------------------------
|
|---|
| 124 | // Info stored against each thread by COM
|
|---|
| 125 | // ----------------------------------------------------------------------
|
|---|
| 126 | class ThreadInfo
|
|---|
| 127 | {
|
|---|
| 128 | private:
|
|---|
| 129 | LONG m_RefCount;
|
|---|
| 130 |
|
|---|
| 131 | Apartment * m_pAptHome;
|
|---|
| 132 | ObjectContext * m_pCurContext;
|
|---|
| 133 |
|
|---|
| 134 | protected:
|
|---|
| 135 | public:
|
|---|
| 136 | ThreadInfo() : m_RefCount(1), m_pAptHome(0), m_pCurContext(0)
|
|---|
| 137 | {};
|
|---|
| 138 |
|
|---|
| 139 | virtual ~ThreadInfo()
|
|---|
| 140 | { delete m_pAptHome; }
|
|---|
| 141 |
|
|---|
| 142 | LONG AddRef(void )
|
|---|
| 143 | { return ++m_RefCount; }
|
|---|
| 144 |
|
|---|
| 145 | LONG Release(void )
|
|---|
| 146 | { return --m_RefCount; }
|
|---|
| 147 |
|
|---|
| 148 | Apartment * GetHomeApt(void )
|
|---|
| 149 | { return m_pAptHome; }
|
|---|
| 150 |
|
|---|
| 151 | void SetHomeApt(Apartment * pApt)
|
|---|
| 152 | { m_pAptHome = pApt; }
|
|---|
| 153 |
|
|---|
| 154 | ObjectContext * GetCurContext(void )
|
|---|
| 155 | { return m_pCurContext; }
|
|---|
| 156 |
|
|---|
| 157 | void SetCurContext(ObjectContext * curContext)
|
|---|
| 158 | { m_pCurContext = curContext; }
|
|---|
| 159 |
|
|---|
| 160 | };
|
|---|
| 161 |
|
|---|
| 162 |
|
|---|
| 163 | #endif /* APARTMENT_INCLUDED */
|
|---|