CClientInfo Class Reference

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.
FragmentInfoRemove ()
 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.

Detailed Description

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.


Constructor & Destructor Documentation

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.

Parameters:
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 }


Member Function Documentation

int CClientInfo::GetIPAddress (  ) 

GetIPAddress retorna o endereco IP do cliente associado ao objeto.

Returns:
endereco IP do cliente.

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.

Returns:
porta do cliente.

Definition at line 1039 of file StreamControl.cpp.

01040 {
01041     #ifdef RIO_DEBUG1
01042     RioErr << "[CClientInfo - GetPort] Single" << endl;
01043     #endif
01044 
01045     return Port; // Retorna a porta do cliente.
01046 }

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.

Parameters:
fip ponteiro para o objeto a ser inserido no final da fila.
Returns:
S_OK se o objeto foi corretamente inserido na fila, e valor diferente de S_OK se algum erro ocorreu ao inserir o objeto.

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.

Returns:
true se o cliente deve ser removido, ou false em caso contrario.

Definition at line 1021 of file StreamControl.cpp.

01022 {
01023     #ifdef RIO_DEBUG1
01024     RioErr << "[CClientInfo - MustRemoveClient] Single" << endl;
01025     #endif
01026 
01027     return ( IdleCount == 0 ); // Se o contador for zero, entao o cliente 
01028                                // devera ser removido. Em caso contrario, ainda
01029                                // nao devera ser removido.
01030 }

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.

Returns:
ponteiro para o elemento do inicio da fila que foi removido, se o objeto possuir creditos e a fila nao estiver vazia, ou NULL em caso contrario (isto e, se a fila estiver vazia ou se o objeto nao possuir creditos).

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 }


Field Documentation

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.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:31 2012 for RIO by  doxygen 1.6.3