示例#1
0
CUnitDiskObjectList 
CDiskObjectBuilder::BuildDiskObjectList(
	const CDeviceInfoList listDevice, LPREFRESH_STATUS pFuncRefreshStatus, void *context)
{
	CUnitDiskObjectList listDiskObj;
	CDeviceInfoList::const_iterator itr;
	UINT number = 0;
	for ( itr = listDevice.begin(); itr != listDevice.end(); ++itr )
	{
		if(pFuncRefreshStatus)
		{
			if(!pFuncRefreshStatus(number++, context))
				return listDiskObj;
		}

		CUnitDiskObjectPtr diskObj;
		UINT nDiskCount;
		CLanSession session( (*itr)->GetDeviceID()->Node );

		// AING : should be replaced with disconnected disk in future
		if(NDAS_DEVICE_STATUS_DISCONNECTED == (*itr)->GetDeviceStatus())
			continue;
		
		// Get number of disks in the device
		try {
			session.Connect();
			nDiskCount = session.GetDiskCount();
			session.Disconnect();
		}
		catch( CNDASException &e )
		{
			(*itr)->SetDeviceStatus(NDAS_DEVICE_STATUS_DISCONNECTED);
			e.PrintStackTrace();
			continue;
		}

		// Create disk object by retrieving information from the device.
		for ( UINT i=0; i < nDiskCount; i++ )
		{
			try {
				diskObj = CreateDiskObject( *itr, static_cast<unsigned _int8>(i) );
				listDiskObj.push_back( diskObj );
			}
			catch( CNDASException &e )
			{
				e.PrintStackTrace();
				continue;
			}
		}
	}
	return listDiskObj;
}