www.pudn.com > GGBT.rar > Choker.h
// Choker.h: interface for the CChoker class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CHOKER_H__C1CFEB4B_319A_437D_81C9_DD69A484ACA7__INCLUDED_)
#define AFX_CHOKER_H__C1CFEB4B_319A_437D_81C9_DD69A484ACA7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CConnection;
class CChoker
{
class CPreferItem
{
public:
CPreferItem(long lrate, CConnection* pConnection)
{
m_lrate = lrate;
m_pConnection = pConnection;
}
long m_lrate;
CConnection* m_pConnection;
};
struct std::greater
{
bool operator()(CPreferItem&x, CPreferItem& y)
{
return x.m_lrate > y.m_lrate;
}
};
public:
CChoker(long lMaxUploads, HANDLE hevDone);
virtual ~CChoker();
void SetMaxUploads(long lMaxUploads);
time_t round_robin();
void interested(CConnection* pConnection);
void not_interested(CConnection* pConnection);
void connection_lost(CConnection* pConnection);
void connection_made(CConnection* pConnection);
private:
void _test();
void _round_robin();
void _rechoke();
bool _snubbed(CConnection* pConnection);
long _rate(CConnection* pConnection);
static void printitem(CPreferItem& item);
vector m_connections;
long m_lMaxUploads;
HANDLE m_hevDone;
time_t m_tRoundRobin;
long m_lCount;
};
#endif // !defined(AFX_CHOKER_H__C1CFEB4B_319A_437D_81C9_DD69A484ACA7__INCLUDED_)