home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / com / connect / server / random.h < prev    next >
C/C++ Source or Header  |  1998-04-02  |  2KB  |  68 lines

  1. // Random.h : Declaration of the CRandom
  2.  
  3.  
  4. #include "connres.h"       // main symbols
  5.  
  6. /////////////////////////////////////////////////////////////////////////////
  7. // CRandom
  8.  
  9. const int nMaxSessions = 10;
  10.  
  11. class CRandom : 
  12.     public CComDualImpl<IRandom, &IID_IRandom, &LIBID_CONNECTLib>, 
  13.     public IConnectionPointContainerImpl<CRandom>,
  14.     public IConnectionPointImpl<CRandom, &IID_IRandomEvent, CComDynamicUnkArray>,
  15.     public ISupportErrorInfo,
  16.     public CComObjectRoot,
  17.     public CComCoClass<CRandom,&CLSID_CoRandom>
  18. {
  19. public:
  20.     CRandom() 
  21.     {
  22.         memset(m_rsArray, 0, nMaxSessions*sizeof(RandomSessionData));
  23.     }
  24.     ~CRandom();
  25.  
  26. BEGIN_COM_MAP(CRandom)
  27.     COM_INTERFACE_ENTRY2(IDispatch, IRandom)
  28.     COM_INTERFACE_ENTRY(IRandom)
  29.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  30.     COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  31. END_COM_MAP()
  32. //  DECLARE_NOT_AGGREGATABLE(CRandom) 
  33. // Remove the comment from the line above if you don't want your object to 
  34. // support aggregation.  The default is to support it
  35.  
  36.     DECLARE_REGISTRY_RESOURCEID(IDR_Random)
  37.  
  38. // Connection Point
  39.     BEGIN_CONNECTION_POINT_MAP(CRandom)
  40.         CONNECTION_POINT_ENTRY(IID_IRandomEvent)
  41.     END_CONNECTION_POINT_MAP()
  42.     
  43. // ISupportsErrorInfo
  44.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  45.  
  46. // IRandom
  47.     STDMETHOD(get_Start)(long* pnID);
  48.     STDMETHOD(put_Stop)(long nID);
  49.     STDMETHOD(StopAll)();
  50.  
  51.     // method to broadcast a call on the current connections
  52.     HRESULT Fire(long  nID);
  53.     // info associated to each session
  54.     struct RandomSessionData
  55.     {
  56.         CRandom* pRandom;
  57.         HANDLE m_hEvent;
  58.         HANDLE m_hThread;
  59.         int m_nID;
  60.     };
  61. protected:
  62.  
  63.     RandomSessionData m_rsArray[nMaxSessions];
  64.     void CreateRandomSession(RandomSessionData& rs);
  65.  
  66.     _ThreadModel::AutoCriticalSection m_cs;
  67. };
  68.