A classe que representa um cliente e que tambem e cada elemento do heap. More...
#include <StreamControl.h>
Inherits CLeakBucket.
Public Member Functions | |
CClientInfo (unsigned int MaxCredits, unsigned long long int TimeBetweenCredits, int ip, int port) | |
CClientInfo construtor da classe, chamado quando um objeto e criado usando o comando new. | |
~CClientInfo () | |
~CClientInfo destrutor da classe, chamado quando um objeto e removido com o comando delete. | |
int | Insert (FragmentInfo *fip) |
Insert Insere um objeto FragmentInfo no final da fila do objeto associado ao cliente. | |
FragmentInfo * | Remove () |
Remove remove um dos elementos do inicio da fila do um objeto associado ao cliente, se a fila nao estiver vazia e se este objeto possuir creditos. | |
void | UpdateCredits () |
UpdateCredits atualiza, se necessario, o numero de creditos de um objeto associado ao cliente. | |
bool | MustRemoveClient () |
MustRemoveClient verifica se o cliente associado ao objeto deve ser removido porque esta inativo por muito tempo. | |
int | GetIPAddress () |
GetIPAddress retorna o endereco IP do cliente associado ao objeto. | |
int | GetPort () |
GetPort retorna a porta do cliente associado ao objeto. | |
Private Attributes | |
int | IP |
Endereco IP do cliente (na ordem da rede). | |
int | Port |
Porta IP do cliente (na ordem da rede). | |
unsigned int | IdleCount |
Contador usado para detectar a inatividade do cliente. | |
pthread_mutex_t | m_AccessFragmentQueue |
Mutex para garantir o acesso exclusivo a fila do LeakBucket. |
A classe que representa um cliente e que tambem e cada elemento do heap.
Para cada um dos clientes sera criado um objeto da classe CClientInfo.
Definition at line 443 of file StreamControl.h.
CClientInfo::CClientInfo | ( | unsigned int | MaxCredits, | |
unsigned long long int | TimeBetweenCredits, | |||
int | ip, | |||
int | port | |||
) |
CClientInfo construtor da classe, chamado quando um objeto e criado usando o comando new.
Esta classe e derivada da classe CLeakBucket, descrita anteriormente. Cada objeto desta classe sera associado a um cliente com trafego de tempo real conectado ao servidor.
MaxCredits | valor inteiro (nao sinalizado), definindo o numero maximo de creditos a serem contabilizados pelo objeto criado. | |
TimeBetweenCredits | tempo em microsegundos entre duas atualizacoes do credito do objeto. | |
ip | endereco IP do cliente associado ao objeto da classe que esta sendo criado. | |
port | porta do cliente associado ao objeto da classe que esta sendo criado. |
Definition at line 904 of file StreamControl.cpp.
00907 :CLeakBucket( MaxCredits, TimeBetweenCredits ) 00908 { 00909 #ifdef RIO_DEBUG1 00910 RioErr << "[CClientInfo - Construtor] Start" << endl; 00911 #endif 00912 00913 // Inicializa as variaveis da classe. 00914 IP = ip; // IP do cliente (na ordem da rede). 00915 Port = port; // Porta do cliente (na ordem da rede). 00916 IdleCount = MAXIDLECOUNT; // Inicializa o contador de inatividade. 00917 // Cria o mutex para garantir o acesso exclusivo a fila do LeakBucket. 00918 pthread_mutex_init( &m_AccessFragmentQueue, NULL ); 00919 00920 #ifdef RIO_DEBUG1 00921 RioErr << "[CClientInfo - Construtor] Finish" << endl; 00922 #endif 00923 }
CClientInfo::~CClientInfo | ( | ) |
~CClientInfo destrutor da classe, chamado quando um objeto e removido com o comando delete.
Definition at line 926 of file StreamControl.cpp.
00927 { 00928 #ifdef RIO_DEBUG1 00929 RioErr << "[CClientInfo - Destrutor] Start" << endl; 00930 #endif 00931 00932 // Remove o mutex para garantir o acesso exclusivo a fila do LeakBucket. 00933 pthread_mutex_destroy( &m_AccessFragmentQueue ); 00934 00935 #ifdef RIO_DEBUG1 00936 RioErr << "[CClientInfo - Destrutor] Finish" << endl; 00937 #endif 00938 }
int CClientInfo::GetIPAddress | ( | ) |
GetIPAddress retorna o endereco IP do cliente associado ao objeto.
Definition at line 1033 of file StreamControl.cpp.
01034 { 01035 return IP; // Retorna o IP do cliente. 01036 }
int CClientInfo::GetPort | ( | ) |
GetPort retorna a porta do cliente associado ao objeto.
Definition at line 1039 of file StreamControl.cpp.
int CClientInfo::Insert | ( | FragmentInfo * | fip | ) | [virtual] |
Insert Insere um objeto FragmentInfo no final da fila do objeto associado ao cliente.
Alem disso, como o cliente passou a ter interacao com o servidor, pois temos fragmentos a serem enviados para ele, resetaremos o contador de usado para detectar que um cliente esta inativo.
fip | ponteiro para o objeto a ser inserido no final da fila. |
Reimplemented from CFragmentQueue.
Definition at line 943 of file StreamControl.cpp.
00944 { 00945 int result; 00946 00947 #ifdef RIO_DEBUG1 00948 RioErr << "[CClientInfo - Insert] Start" << endl; 00949 #endif 00950 00951 // Obtem o acesso ao mutex para garantir o acesso exclusivo a fila do 00952 // LeakBucket. 00953 pthread_mutex_lock( &m_AccessFragmentQueue ); 00954 // Inicializa o contador de inatividade com o valor maximo. 00955 IdleCount = MAXIDLECOUNT; 00956 // Chama a funcao da classe pai para inserir o fragmento na fila. 00957 result = CLeakBucket::Insert( fip ); 00958 // Libera o mutex para garantir o acesso exclusivo a fila do LeakBucket. 00959 pthread_mutex_unlock( &m_AccessFragmentQueue ); 00960 00961 #ifdef RIO_DEBUG1 00962 RioErr << "[CClientInfo - Insert] Finish" << endl; 00963 #endif 00964 00965 return result; 00966 }
bool CClientInfo::MustRemoveClient | ( | ) |
MustRemoveClient verifica se o cliente associado ao objeto deve ser removido porque esta inativo por muito tempo.
Isso ocorrera se o contador de inatividade for igual a 0.
Definition at line 1021 of file StreamControl.cpp.
FragmentInfo * CClientInfo::Remove | ( | void | ) | [virtual] |
Remove remove um dos elementos do inicio da fila do um objeto associado ao cliente, se a fila nao estiver vazia e se este objeto possuir creditos.
Depois da remocao do elemento do inicio da fila, o numero de creditos do objeto sera decrementado em 1 unidade.
Reimplemented from CLeakBucket.
Definition at line 970 of file StreamControl.cpp.
00971 { 00972 FragmentInfo *fip; 00973 00974 #ifdef RIO_DEBUG1 00975 RioErr << "[CClientInfo - Remove] Start" << endl; 00976 #endif 00977 00978 // Obtem o acesso ao mutex para garantir o acesso exclusivo a fila do 00979 // LeakBucket. 00980 pthread_mutex_lock( &m_AccessFragmentQueue ); 00981 // Chama a funcao da classe pai para remover o fragmento na fila. 00982 fip = CLeakBucket::Remove(); 00983 // Libera o mutex para garantir o acesso exclusivo a fila do LeakBucket. 00984 pthread_mutex_unlock( &m_AccessFragmentQueue ); 00985 00986 #ifdef RIO_DEBUG1 00987 RioErr << "[CClientInfo - Remove] Finish" << endl; 00988 #endif 00989 00990 return fip; 00991 }
void CClientInfo::UpdateCredits | ( | ) | [virtual] |
UpdateCredits atualiza, se necessario, o numero de creditos de um objeto associado ao cliente.
Se o tempo entre as atualizacoes nao passou, o credito nao sera atualizado e um contador, usado para detectar se o cliente esta inativo, sera decrementado caso a fila do cliente esteja vazia. Em caso contrario, o credito sera incrementado, e se mais tempo passou, o numero de creditos sera aumentado de acordo (por exemplo, se decorreu um tempo tres vezes maior do que o da atualizacao, o credito sera aumentado em 3 unidades).
Reimplemented from CLeakBucket.
Definition at line 996 of file StreamControl.cpp.
00997 { 00998 #ifdef RIO_DEBUG1 00999 RioErr << "[CClientInfo - UpdateCredits] Start" << endl; 01000 #endif 01001 01002 // Obtem o acesso ao mutex para garantir o acesso exclusivo a fila do 01003 // LeakBucket. 01004 pthread_mutex_lock( &m_AccessFragmentQueue ); 01005 // Verifica se a fila FIFO esta vazia, pois neste caso deveremos decrementar 01006 // o contador de inatividade em uma unidade (se ele nao for zero). 01007 if( ( IsEmpty() ) && ( IdleCount > 0 ) ) 01008 IdleCount--; 01009 // Libera o mutex para garantir o acesso exclusivo a fila do LeakBucket. 01010 pthread_mutex_unlock( &m_AccessFragmentQueue ); 01011 // Chama a funcao da classe pai para atualizar os creditos do cliente. 01012 CLeakBucket::UpdateCredits(); 01013 01014 #ifdef RIO_DEBUG1 01015 RioErr << "[CClientInfo - UpdateCredits] Finish" << endl; 01016 #endif 01017 }
unsigned int CClientInfo::IdleCount [private] |
Contador usado para detectar a inatividade do cliente.
Quando o contador for nulo, isso significa que o cliente devera ser removido do heap e do mapa.
Definition at line 454 of file StreamControl.h.
int CClientInfo::IP [private] |
Endereco IP do cliente (na ordem da rede).
Definition at line 447 of file StreamControl.h.
pthread_mutex_t CClientInfo::m_AccessFragmentQueue [private] |
Mutex para garantir o acesso exclusivo a fila do LeakBucket.
Definition at line 456 of file StreamControl.h.
int CClientInfo::Port [private] |
Porta IP do cliente (na ordem da rede).
Definition at line 449 of file StreamControl.h.