home *** CD-ROM | disk | FTP | other *** search
- ///////////////////////////////////////////////////////////////////////////////
- //
- // File Name
- // XPLIST.H
- //
- // Description
- // Data structures, class definitions, and prototypes for downloading
- // messages. Here define CList and CMsgQueue.
- // CList holds a pointer to two messages queues: Messages to download
- // and downloaded messages that are pending processing from the spooler.
- //
- // Author
- // Les Thaler
- //
- // Revision: 1.7
- //
- // Written for Microsoft Windows Developer Support
- // Copyright (c) 1995-1996 Microsoft Corporation. All rights reserved.
- //
- #ifndef _XPLIST_H_
- #define _XPLIST_H_
-
- long WINAPI FileCopy (HANDLE hTemp, HANDLE hPipe, DWORD dwMsgLen);
- MID WINAPI PropToMID (long lProp);
-
- class CList;
- class CXPLogon;
-
- // node in queue of downloaded/to-be-downloaded messages
- typedef struct _LIST_NODE
- {
- struct _LIST_NODE * pNext;
- HANDLE hFile;
- TCHAR szFileName[_MAX_PATH];
- MSG_HDR Hdr;
- MID OpStat;
- BOOL fRetry;
- } LIST_NODE, *PLIST_NODE;
-
-
- // FIFO queue of downloaded/to-be-downloaded messages
- class CMsgQueue
- {
- friend CList;
- ///////////////////////////////////////////////////////////////////////////////
- // Member functions specific to this class
- //
- public:
- void WINAPI Insert
- (PLIST_NODE pNode);
- PLIST_NODE WINAPI Delete
- ();
- inline BOOL WINAPI Empty
- () { return m_ulItems == 0;};
-
- ///////////////////////////////////////////////////////////////////////////////
- // Constructors and destructors
- //
- CMsgQueue();
- ~CMsgQueue();
-
- ///////////////////////////////////////////////////////////////////////////////
- // Data members
- //
- private :
- PLIST_NODE m_pHead;
- PLIST_NODE m_pTail;
- public:
- ULONG m_ulItems;
- };
-
- // Object for manipulating downloaded/to-be-downloaded queues
- // including managing data transfer with remote server
- class CList
- {
- ///////////////////////////////////////////////////////////////////////////////
- // Member functions specific to this class
- //
- public :
- BOOL WINAPI Init
- ();
- STDMETHODIMP DownLoadMsgs
- (LPMAPITABLE pTable,
- ULONG ulRowCount,
- HANDLE hPipe);
- BOOL WINAPI UpdateTableRow
- (LPBYTE pEID,
- MID midAction);
- inline void WINAPI SetLogon
- (CXPLogon * pLogon)
- { m_pLogon = pLogon; }
- inline PLIST_NODE WINAPI GetDownloadNode
- () { if (m_pDownloaded)
- { return m_pDownloaded->Delete(); }
- return NULL; }
- inline BOOL WINAPI AreTherePendingDownloads
- () { if (m_pDownloaded)
- { return (!m_pDownloaded->Empty()); }
- return FALSE; }
- inline BOOL WINAPI QueuePendingMsgFile
- (LPTSTR pstrFileName)
- { PLIST_NODE pNode = new LIST_NODE;
- if (pNode)
- { ZeroMemory (pNode, sizeof(LIST_NODE));
- lstrcpy (pNode->szFileName, pstrFileName);
- m_pDownloaded->Insert (pNode);
- return TRUE;
- }
- TraceMessage ("CLisg::QueuePendingMsgFile: Failed to allocate new node");
- return FALSE; }
- void WINAPI UpdateProgress
- ();
- inline void WINAPI ReQueueNode
- (PLIST_NODE pNode)
- { m_pToDownload->Insert (pNode); }
-
- private :
- void WINAPI DownLoadNow
- (HANDLE hPipe);
- ///////////////////////////////////////////////////////////////////////////////
- // Constructors and destructors
- //
- public :
- CList();
- ~CList();
-
- ///////////////////////////////////////////////////////////////////////////////
- // Data members
- //
- private :
- ULONG m_ulMsgCount;
- ULONG m_ulMsgLeft;
- CXPLogon * m_pLogon; // We need access to his stuff
- CMsgQueue * m_pToDownload; // 'TO DO' queue
- CMsgQueue * m_pDownloaded; // 'DONE' queue
- };
-
- #endif // _XPLIST_H_
-
- // End of file for XPLIST.H
-