#ifndef _CRAWLER_H_
#define _CRAWLER_H_

#define CB_WNET_BUFFER 8*1024

typedef enum tagCrawlerFlags
{
	NC_FINISHED         = 0x0001,
    NC_INIT_WORKGROUPS  = 0x0002,
} NCFLAGS;

class CNetCrawler
{
public:
    CNetCrawler(void) : _dwStatus(0), _hdpaWorkGroups(NULL), _cRef(1), _cItems(0) {}
	~CNetCrawler(void);
	void Init(DWORD dwFlags, int nItems);
    HRESULT GetWorkGroupName(LPTSTR pszWorkGroupName, int cb, BOOL fBlocking);
    inline void AddRef(void)
    {
        InterlockedIncrement(&_cRef);
    }
    inline void Release(void)
    {
        InterlockedDecrement(&_cRef);
        if (!_cRef)
            delete this;
    }

private:
    BOOL _dwStatus;
    HDPA _hdpaWorkGroups;
    int _iMaxItems;
    int _cItems;
    LONG _cRef;

	void _EnumNetResources(LPNETRESOURCE pnr);
 	static DWORD WINAPI _EnumWorkGroups(LPVOID pv);
};

#endif  // _CRAWLER_H_