#include "stdafx.h"
|
#include "MBUploadQueue.h"
|
|
CMBUploadQueue::CMBUploadQueue()
|
{
|
DeleteAll();
|
}
|
CMBUploadQueue::~CMBUploadQueue()
|
{
|
DeleteAll();
|
}
|
|
HANDLE CMBUploadQueue::GetEventShutdownHandle()
|
{
|
CSingleLock lock( &m_cs, true );
|
return m_eventShutdown.GetEvent();
|
}
|
|
HANDLE CMBUploadQueue::GetEventExeHandle()
|
{
|
CSingleLock lock( &m_cs, true );
|
return m_eventExe.GetEvent();
|
}
|
|
void CMBUploadQueue::SetEventShutdownSet()
|
{
|
CSingleLock lock( &m_cs, true );
|
m_eventShutdown.Set();
|
}
|
|
void CMBUploadQueue::SetEventShutdownReset()
|
{
|
CSingleLock lock( &m_cs, true );
|
m_eventShutdown.Reset();
|
}
|
|
void CMBUploadQueue::SetEventExeSet()
|
{
|
CSingleLock lock( &m_cs, true );
|
m_eventExe.Set();
|
}
|
|
void CMBUploadQueue::SetEventExeReset()
|
{
|
CSingleLock lock( &m_cs, true );
|
m_eventExe.Reset();
|
}
|
|
// upload
|
void CMBUploadQueue::AddClientToUploadQueue(CAutoRefPtr<CMBUploadFileInfo> & client)
|
{
|
CSingleLock lock( &m_cs, true );
|
m_listUploading.push_back(client);
|
}
|
|
bool CMBUploadQueue::RemoveFromUploadQueue(CMBUploadFileInfo * client)
|
{
|
CSingleLock lock( &m_cs, true );
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
{
|
curClient = *it;
|
if( client->m_strID == curClient->m_strID )
|
{
|
m_listUploading.erase(it++);
|
}
|
else
|
{
|
++it;
|
}
|
}
|
return true;
|
}
|
|
//bool CMBUploadQueue::RemoveFromUploadQueue(CAutoRefPtr<CMBUploadFileInfo> & client)
|
//{
|
// CSingleLock lock( &m_cs, true );
|
//
|
//}
|
|
bool CMBUploadQueue::RemoveUnUseFromUploadQueue( BOOL &bState )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
{
|
curClient = *it;
|
// ´íÎó£¬É¾³ý£¬ÔÝÍ£ ´ÓÉÏ´«¶ÓÁÐÖÐɾ³ý
|
if (curClient->GetStatus() == CMBUploadFileInfo::Status_Delete || curClient->GetStatus() == CMBUploadFileInfo::Status_DeleteOnQueue
|
|| curClient->GetStatus() == CMBUploadFileInfo::Status_Pause || curClient->GetStatus() == CMBUploadFileInfo::Status_Err
|
)
|
{
|
m_listUploading.erase(it++);
|
}else
|
{
|
++it;
|
}
|
}
|
//for (POSITION pos = m_listUploading.GetHeadPosition();pos != 0;){
|
// if(!bState)
|
// return false;
|
// POSITION curPos = pos;
|
// CAutoRefPtr<CMBUploadFileInfo> & curClient = m_listUploading.GetNext(pos);
|
// // ɾ³ý£¬´íÎó£¬ÔÝÍ££¬¶¼´ÓÉÏ´«¶ÓÁÐÖÐÇå³ý
|
// //if (curClient->GetState() == CMBTransInfo::State_Delete || curClient->GetState() == CMBTransInfo::State_DeleteOnQueue || curClient->GetState() == CMBTransInfo::State_Pause || curClient->GetState() == CMBTransInfo::State_Err ){ //
|
// m_listUploading.RemoveAt(curPos);
|
// //}
|
//}
|
return true;
|
}
|
|
int CMBUploadQueue::GetUploadQueueLength()
|
{
|
CSingleLock lock( &m_cs, true );
|
|
return m_listUploading.size();
|
}
|
|
bool CMBUploadQueue::ReUploadQueue( int nMaxUploadCount,BOOL &bState )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
if(m_listUploading.size() == nMaxUploadCount)
|
return true;
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
{
|
curClient = *it;
|
if(m_listUploading.size() < nMaxUploadCount)
|
{
|
if( curClient->GetStatus() == CMBUploadFileInfo::Status_NoFinish )
|
{
|
if( !IsOnUploadingQueue(curClient ) ) // ×öÒ»¸ö±£»¤
|
{
|
m_listUploading.push_back(curClient);
|
curClient->SetStatus(CMBUploadFileInfo::Status_OnUpQueue);
|
}
|
}
|
}else
|
{
|
return true;
|
}
|
}
|
return true;
|
}
|
|
void CMBUploadQueue::CopyUploadingQueue( CUpClientAutoPtrList &listUploading )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
listUploading.clear();
|
listUploading = m_listUploading;
|
}
|
|
__int64 CMBUploadQueue::GetTransRate()
|
{
|
CSingleLock lock( &m_cs, true );
|
|
__int64 nTransRate = 0;
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
{
|
curClient = *it;
|
if( curClient->GetStatus() != CMBUploadFileInfo::Status_Err )
|
{
|
if( curClient->m_nTransRate > 0 )
|
nTransRate += curClient->m_nTransRate;
|
}
|
}
|
return nTransRate;
|
}
|
|
bool CMBUploadQueue::IsOnUploadingQueue( CAutoRefPtr<CMBUploadFileInfo> & client )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
{
|
curClient = *it;
|
if( curClient->GetLocalPath() == client->GetLocalPath() )
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
// waiting
|
|
bool CMBUploadQueue::RemoveFinishFromWaitingQueue( BOOL &bState )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listWaiting.begin();it != m_listWaiting.end(); )
|
{
|
curClient = *it;
|
|
if (curClient->GetStatus() == CMBUploadFileInfo::Status_Delete || curClient->GetStatus() == CMBUploadFileInfo::Status_DeleteOnQueue ){
|
m_listWaiting.erase(it++);
|
}else{
|
++it;
|
}
|
}
|
|
return true;
|
}
|
|
bool CMBUploadQueue::RemoveFromWaitingQueue(CMBUploadFileInfo *client)
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listWaiting.begin();it != m_listWaiting.end(); )
|
{
|
curClient = *it;
|
|
if (client->m_strID == curClient->m_strID ){
|
m_listWaiting.erase(it++);
|
}else{
|
++it;
|
}
|
}
|
|
return true;
|
}
|
|
// µÃµ½µÈ´ý¶ÓÁÐÖеÄÊý¾Ý
|
bool CMBUploadQueue::GetWaitingQueue( CString strCabinetID,CString strServerPath,CUpClientAutoPtrList &lstClient )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
{
|
curClient = *it;
|
if( curClient->m_strCabinetID == strCabinetID && curClient->m_strServerPath == strServerPath )
|
{
|
lstClient.push_back(curClient);
|
}
|
}
|
|
return true;
|
}
|
|
//bool CMBUploadQueue::RemoveFromWaitingQueue(CAutoRefPtr<CMBUploadFileInfo> & client)
|
//{
|
// CSingleLock lock( &m_cs, true );
|
//
|
//
|
//
|
// //POSITION pos = m_listWaiting.Find(client);
|
// //if (pos){
|
// // RemoveFromWaitingQueue(pos);
|
// // return true;
|
// //}
|
// //else
|
// // return false;
|
// return true;
|
//}
|
|
|
|
int CMBUploadQueue::GetWaitingUserCount()
|
{
|
CSingleLock lock( &m_cs, true );
|
|
return m_listWaiting.size();
|
}
|
|
|
void CMBUploadQueue::AddClientToWaitingList(CAutoRefPtr<CMBUploadFileInfo> & newclient)
|
{
|
CSingleLock lock( &m_cs, true );
|
|
m_listWaiting.push_back(newclient);
|
}
|
|
CAutoRefPtr<CMBUploadFileInfo> CMBUploadQueue::FindBestClientInQueue()
|
{
|
CSingleLock lock( &m_cs, true );
|
|
|
return NULL;
|
}
|
|
void CMBUploadQueue::RemoveQueue( CString strID )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
// ´ÓµÈ´ý¶ÓÁÐÖÐɾ³ý
|
for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
{
|
curClient = *it;
|
if( strID == curClient->m_strID )
|
{
|
m_listWaiting.erase(it++);
|
break;
|
}
|
else
|
{
|
++it;
|
}
|
}
|
// ´ÓÉÏ´«¶ÓÁÐÖÐɾ³ý
|
for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
{
|
curClient = *it;
|
if( strID == curClient->m_strID )
|
{
|
m_listUploading.erase(it++);
|
break;
|
}
|
else
|
{
|
++it;
|
}
|
}
|
}
|
|
//CString CMBUploadQueue::GetWaitingTransIDS()
|
//{
|
// CSingleLock lock( &m_cs, true );
|
// CString strIDS;
|
//
|
// CUpClientAutoPtrList::iterator it;
|
// CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
//
|
// for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
// {
|
// curClient = *it;
|
// strIDS += _T("'") + curClient->m_strID + _T("'") ;
|
// strIDS += _T(",");
|
// }
|
// if( strIDS.IsEmpty() )
|
// return strIDS;
|
// strIDS = strIDS.Left(strIDS.GetLength() -1);
|
//
|
// return strIDS;
|
//}
|
|
void CMBUploadQueue::ReUploadVector(UINT nResize,CMBUploadFileAutoPtrVector &vectorTmpUpload)
|
{
|
CSingleLock lock( &m_cs, true );
|
|
vectorTmpUpload.clear();
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
{
|
curClient = *it;
|
if( nResize <= vectorTmpUpload.size() )
|
{
|
break;
|
}
|
vectorTmpUpload.push_back(curClient);
|
}
|
|
|
//vectorTmpAllUpload.RemoveAll();
|
//for (POSITION pos = m_listWaiting.GetHeadPosition();pos != 0;)
|
//{
|
// CAutoRefPtr<CMBUploadFileInfo> & curClient = m_listWaiting.GetNext(pos);
|
// vectorTmpAllUpload.push_back(curClient);
|
//}
|
}
|
|
//void CMBUploadQueue::DeleteQueue( int nStatus,CString & strTrID )
|
//{
|
// CSingleLock lock( &m_cs, true );
|
//
|
// CString strTmpTrID;
|
//
|
// strTrID.Empty();
|
//
|
// m_listWaiting.clear();
|
// // ÉèÖÃ״̬Ϊɾ³ý
|
// CUpClientAutoPtrList::iterator it;
|
// CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
// int nTrID = 0;
|
// for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
// {
|
// curClient = *it;
|
//
|
// nTrID = curClient->GetTrID();
|
// if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
// {
|
// if( nTrID >0 )
|
// {
|
// strTmpTrID.Format(_T("%d;"),nTrID);
|
// strTrID += strTmpTrID;
|
// }
|
// curClient->SetStatus( nStatus );
|
// m_listUploading.erase(it++);
|
// }else
|
// {
|
// ++it;
|
// }
|
// }
|
// if( !strTrID.IsEmpty() )
|
// {
|
// strTrID = strTrID.Left(strTrID.GetLength() -1);
|
// }
|
//
|
//}
|
//
|
//// ÉèÖöÓÁÐ״̬
|
//void CMBUploadQueue::SetQueueStatus( int nStatus,CString &strTrID )
|
//{
|
// CSingleLock lock( &m_cs, true );
|
//
|
// strTrID.Empty();
|
// int nTrID = 0;
|
// CString strTmpTrID;
|
//
|
// CUpClientAutoPtrList::iterator it;
|
// CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
//
|
// ////////////////////
|
// for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
// {
|
// curClient = *it;
|
// if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
// {
|
// curClient->SetStatus( nStatus );
|
// }
|
// }
|
// /////////////////
|
// for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
// {
|
// curClient = *it;
|
// curClient->SetStatus( nStatus );
|
// nTrID = curClient->GetTrID();
|
// if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
// {
|
// if( nTrID >0 )
|
// {
|
// strTmpTrID.Format(_T("%d;"),nTrID);
|
// strTrID += strTmpTrID;
|
// }
|
// curClient->SetStatus( nStatus );
|
// }
|
// }
|
// if( !strTrID.IsEmpty() )
|
// {
|
// strTrID = strTrID.Left(strTrID.GetLength() -1);
|
// }
|
//}
|
|
|
void CMBUploadQueue::DeleteQueue( int nStatus,CStringArray &arInfo )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
arInfo.RemoveAll();
|
m_listWaiting.clear();
|
|
int nTrID = 0;
|
CString strTmpTrID,strTmpFileSvr;
|
|
// ÉèÖÃ״̬Ϊɾ³ý
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
{
|
curClient = *it;
|
|
nTrID = curClient->GetTrID();
|
strTmpFileSvr = curClient->m_strFileSvr;
|
|
if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
{
|
if( nTrID >0 )
|
{
|
strTmpTrID.Format(_T("%d;"),nTrID);
|
arInfo.Add( strTmpTrID + _T(";") + strTmpFileSvr );
|
}
|
curClient->SetStatus( nStatus );
|
m_listUploading.erase(it++);
|
}else
|
{
|
++it;
|
}
|
}// end for( it = m_listUploading.begin();it != m_listUploading.end(); )
|
}
|
|
// ÉèÖöÓÁÐ״̬
|
void CMBUploadQueue::SetQueueStatus( int nStatus,CStringArray &arInfo )
|
{
|
CSingleLock lock( &m_cs, true );
|
|
arInfo.RemoveAll();
|
|
int nTrID = 0;
|
CString strTmpTrID,strTmpFileSvr;
|
|
CUpClientAutoPtrList::iterator it;
|
CAutoRefPtr<CMBUploadFileInfo> curClient = NULL;
|
|
////////////////////
|
for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
{
|
curClient = *it;
|
if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
{
|
curClient->SetStatus( nStatus );
|
}
|
}// end for( it = m_listWaiting.begin();it != m_listWaiting.end();it++ )
|
/////////////////
|
for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
{
|
curClient = *it;
|
curClient->SetStatus( nStatus );
|
|
nTrID = curClient->GetTrID();
|
strTmpFileSvr = curClient->m_strFileSvr;
|
|
if( curClient->GetStatus() != CMBUploadFileInfo::Status_Finish )
|
{
|
if( nTrID >0 )
|
{
|
strTmpTrID.Format(_T("%d;"),nTrID);
|
arInfo.Add( strTmpTrID + _T(";") + strTmpFileSvr );
|
}
|
curClient->SetStatus( nStatus );
|
}
|
}// end for( it = m_listUploading.begin();it != m_listUploading.end();it++ )
|
}
|
|
void CMBUploadQueue::DeleteAll()
|
{
|
m_listWaiting.clear();
|
m_listUploading.clear();
|
}
|