/*++

Copyright (C) 1996-2001 Microsoft Corporation

Module Name:

Abstract:

History:

--*/


#ifndef __MULTSEND_H__
#define __MULTSEND_H__

#include <sync.h>
#include <unk.h>
#include <comutl.h>
#include <wmimsg.h>

class CMsgMultiSendReceive 
: public CUnkBase<IWmiMessageMultiSendReceive,&IID_IWmiMessageMultiSendReceive>
{
    struct SenderNode
    {
        SenderNode* m_pNext;
        CWbemPtr<IWmiMessageSendReceive> m_pVal;
        BOOL m_bTermSender;

    }* m_pTail; // tail can move as we send.

    SenderNode* m_pPrimary; // always points to the first one added.

    CCritSec m_cs;

public:

    CMsgMultiSendReceive( CLifeControl* pCtl )
      : CUnkBase< IWmiMessageMultiSendReceive,
                  &IID_IWmiMessageMultiSendReceive >(pCtl), 
       m_pTail( NULL ), m_pPrimary( NULL )
    { 
    }

    ~CMsgMultiSendReceive();

    STDMETHOD(Add)( DWORD dwFlags, 
                    IWmiMessageSendReceive* pSndRcv );
    
    STDMETHOD(SendReceive)( PBYTE pData, 
                            ULONG cData, 
                            PBYTE pAuxData,
                            ULONG cAuxData,
                            DWORD dwFlagsStatus,
                            IUnknown* pCtx );
};

#endif // __MULTSEND_H__