RioStreamObj Class Reference

#include <StreamManager.h>

Public Member Functions

 ~RioStreamObj ()
int Close (bool *RemoveStreamObj)
 Funcao close, usada para fechar o stream associado ao objeto.
int GetSize (RioObjectSize *ObjectSize)
int SetSize (RioObjectSize ObjectSize, char *md5sum, unsigned long long int ExcludeStorages)
int GetType (short *Type)
int GetnBlocks (RioBlock *nBlocks)
int DataRequest (u32 reqid, u16 operation, u32 ipaddr, u16 port, u32 block, u32 repbits)
void RequestCompleted (Event *Request, bool *RemoveStreamObj)
 Funcao para completar uma requisicao ja processada.
RioStreamStream ()
int GetObjectName (char *ObjectName)
 Funcao GetObjectName: retorna o nome do arquivo associado ao objeto apontado pelo campo o_object da classe RioStreamObj.
int GetQueueSize ()
int GetVideoRate (unsigned int *VideoRate)
 GetVideoRate funcao usada pela implementacao controle de fluxo para obter a taxa de transmissao do video (esta funcao sera usada pelo novo metodo remoto da Object Manager, que sera usado pelo riosh para ler a taxa de transmissao do video).
int SetVideoRate (unsigned int VideoRate)
 SetVideoRate funcao usada pela implementacao controle de fluxo para alterar a taxa de transmissao do video (esta funcao sera usada pelo novo metodo remoto da Object Manager, que sera usado pelo riosh para alterar a taxa de transmissao do video).
int ReallocBlocks (unsigned int Block, unsigned long long int ExcludeStorages)
 Funcao usada para realocar os blocos fisicos associados ao bloco logico de um objeto.

Private Types

enum  StreamObjStatus { StreamObjStatusClosed = 0, StreamObjStatusOpened = 1 }

Private Member Functions

 RioStreamObj (CStreamManager *mgr, RioStream *stream)
 RioStreamObj (const RioStreamObj &x)
RioStreamObjoperator= (const RioStreamObj &x)
void CompleteClose ()

Private Attributes

StreamObjStatus m_Status
int m_PendingRequests
CStreamManagero_mgr
RioStreamo_stream
RioObjecto_object

Friends

class RioStream

Detailed Description

Definition at line 308 of file server/StreamManager.h.


Member Enumeration Documentation

Enumerator:
StreamObjStatusClosed 
StreamObjStatusOpened 

Definition at line 311 of file server/StreamManager.h.

00312         {
00313             StreamObjStatusClosed  = 0, // closed or closing
00314             StreamObjStatusOpened  = 1  // Opened and active
00315         } StreamObjStatus;


Constructor & Destructor Documentation

RioStreamObj::RioStreamObj ( CStreamManager mgr,
RioStream stream 
) [private]

Definition at line 4595 of file server/StreamManager.cpp.

04596 {
04597     o_mgr    = mgr;
04598     o_stream = stream;
04599     // ### need mutex for this?
04600     // o_stream->s_usecount++;
04601     o_object = NULL;
04602     m_Status = StreamObjStatusOpened;
04603     m_PendingRequests = 0;
04604 }

RioStreamObj::RioStreamObj ( const RioStreamObj x  )  [private]
RioStreamObj::~RioStreamObj (  ) 

Definition at line 4607 of file server/StreamManager.cpp.

04608 {
04609     CStreamManager* mgr = o_mgr;
04610     mgr->m_MutexTable->Wait();
04611     CompleteClose();
04612     mgr->m_MutexTable->Release();
04613 }


Member Function Documentation

int RioStreamObj::Close ( bool *  RemoveStreamObj  ) 

Funcao close, usada para fechar o stream associado ao objeto.

Obs: Esta funcao tem agora um ponteiro para um booleano, usado para sabermos se e seguro ou nao remover o objeto.

Parameters:
RemoveStreamObj ponteiro para um valor booleano, que informara se o objeto precisa ser removido depois de ter sido fechado.
Returns:
0 (pelo que entendi, nao e retornado um codigo de erro, mas usei uma variavel porque nao sei se este retorno e sepre ignorado).

Definition at line 4705 of file server/StreamManager.cpp.

04706 {
04707     CStreamManager* mgr = o_mgr;
04708 
04709     mgr->m_MutexTable->Wait();
04710     m_Status = StreamObjStatusClosed;
04711 
04712     // Inicialmente nao devemos remover o objeto do stream (pois podem existir
04713     // respostas de requisoes pendentes para este objeto).
04714     *RemoveStreamObj = false;
04715 
04716     // Only complete close after all pending requests complete
04717     if( m_PendingRequests == 0 )
04718     {
04719         CompleteClose();
04720 
04721         // Neste caso, devemos remover o objeto depois de fecha-lo (na funcao
04722         // que chamou Close).
04723         *RemoveStreamObj = true;
04724     }
04725 
04726     mgr->m_MutexTable->Release();
04727 
04728     return 0;
04729 }

void RioStreamObj::CompleteClose (  )  [private]

Definition at line 4732 of file server/StreamManager.cpp.

04733 {
04734     if( o_object != 0 )
04735     {
04736         o_object->Close();
04737         delete o_object;
04738         o_object = 0;
04739     }
04740     // This is legal, since method does not access any class member
04741     // after object is deleted (Assumes object was allocated using new())
04742 //    delete this;
04743 }

int RioStreamObj::DataRequest ( u32  reqid,
u16  operation,
u32  ipaddr,
u16  port,
u32  block,
u32  repbits 
)

Definition at line 4637 of file server/StreamManager.cpp.

04639 {
04640     int rc;
04641 
04642     #ifdef RIO_DEBUG2
04643     //if( o_stream->m_log.is_open() )
04644     o_stream->m_log << "SERVER: StreamManager - DataRequest antes do mutex "
04645                     << endl;
04646     #endif
04647     o_mgr->m_MutexTable->Wait();
04648     #ifdef RIO_DEBUG2
04649     //if( o_stream->m_log.is_open() )
04650     o_stream->m_log << "SERVER: StreamManager - DataRequest depois do mutex "
04651                     << endl;
04652     #endif
04653     rc = o_stream->DataReq( reqid, operation, ipaddr, port, block,
04654                             repbits, this );
04655 
04656     // Just increment request counter if stream call was successful
04657     if( rc == S_OK )
04658         m_PendingRequests++;
04659     else
04660     {
04661         o_stream->m_log << "[StreamManager] Error: Failed executing DataReq." << endl;
04662     }
04663 
04664     o_mgr->m_MutexTable->Release();
04665     #ifdef RIO_DEBUG2
04666     //if( o_stream->m_log.is_open() )
04667     o_stream->m_log << "SERVER: StreamManager - DataRequest liberando mutex "
04668                     << endl;
04669     #endif
04670     return rc;
04671 }

int RioStreamObj::GetnBlocks ( RioBlock nBlocks  ) 

Definition at line 4632 of file server/StreamManager.cpp.

04633 {
04634     return o_object->GetnBlocks( nBlocks );
04635 }

int RioStreamObj::GetObjectName ( char *  ObjectName  ) 

Funcao GetObjectName: retorna o nome do arquivo associado ao objeto apontado pelo campo o_object da classe RioStreamObj.

O nome retornado inclui o caminho relativo do arquivo no sistema de arquivos do sistema operacional em que o Servidor RIO esta executando, em relacao ao diretorio do servidor.(esta funcao e usada pela implementacao da cache).

Parameters:
ObjectName Ponteiro para uma string que ira armazenar o nome do arquivo com o seu caminho. A funcao supoe que existe espaco suficiente na string para copiar o nome no endereco apontado por ObjectName (contando o terminador).
Returns:
S_OK (a funcao nao gera erros).

Definition at line 4753 of file server/StreamManager.cpp.

04754 {
04755     // Usa a função criada para o objeto RioObject (apontado por o_object), para
04756     // obter o nome do arquivo, com o seu caminho, associado ao objeto da classe
04757     // RioStreamObj.
04758     return o_object->GetObjectName( ObjectName );
04759 }

int RioStreamObj::GetQueueSize (  ) 

Definition at line 4761 of file server/StreamManager.cpp.

04762 {
04763     return o_stream->getQueueSize();
04764 }

int RioStreamObj::GetSize ( RioObjectSize ObjectSize  ) 

Definition at line 4616 of file server/StreamManager.cpp.

04617 {
04618     return o_object->GetSize( ObjectSize );
04619 }

int RioStreamObj::GetType ( short *  Type  ) 

Definition at line 4627 of file server/StreamManager.cpp.

04628 {
04629     return o_object->GetType( Type );
04630 }

int RioStreamObj::GetVideoRate ( unsigned int *  VideoRate  ) 

GetVideoRate funcao usada pela implementacao controle de fluxo para obter a taxa de transmissao do video (esta funcao sera usada pelo novo metodo remoto da Object Manager, que sera usado pelo riosh para ler a taxa de transmissao do video).

Parameters:
VideoRate ponteiro para o inteiro nao sinalizado que armazenara a taxa de transmissao do video.
Returns:
S_OK (a funcao do objeto nao gera erros).

Definition at line 4773 of file server/StreamManager.cpp.

04774 {
04775     return o_object->GetVideoRate( VideoRate );
04776 }

RioStreamObj& RioStreamObj::operator= ( const RioStreamObj x  )  [private]
int RioStreamObj::ReallocBlocks ( unsigned int  Block,
unsigned long long int  ExcludeStorages 
)

Funcao usada para realocar os blocos fisicos associados ao bloco logico de um objeto.

Parameters:
Block bloco logico do objeto para o qual desejamos realocar os blocos fisicos.
ExcludeStorages vetor de bits que indica quais servidores de armazenamento nao podem ser usados (cada bit esta associado a um servidor e um valor 1 neste bit indica que o servidor nao pode ser usado) ao alocarmos os blocos.
Returns:
diferente de S_OK se algum erro ocorreu ao realocar os blocos.

Definition at line 4792 of file server/StreamManager.cpp.

04794 {
04795     return o_object->ReallocBlocks( Block, ExcludeStorages );
04796 }

void RioStreamObj::RequestCompleted ( Event Request,
bool *  RemoveStreamObj 
)

Funcao para completar uma requisicao ja processada.

Obs: Esta funcao foi mudada para retornar true se o objeto para o qual chamamos a funcao deve ser removido apos completar esta requisicao.

Parameters:
event ponteiro para o evento associado a requisicao.
RemoveStreamObj ponteiro para um valor booleano que sera alterado para true se o objeto do stream deve ser removido apos executar a funcao (por quem chamou a funcao) ou false em caso contrario.

Definition at line 4675 of file server/StreamManager.cpp.

04676 {
04677     // Inicialmente nao devemos remover o objeto do stream (pois podem existir
04678     // respostas de requisoes pendentes para este objeto e ele pode nao ter
04679     // sido fechado).
04680     *RemoveStreamObj = false;
04681 
04682     CStreamManager* mgr = o_mgr;
04683 
04684     mgr->m_MutexTable->Wait();
04685     m_PendingRequests--;
04686     o_stream->RequestCompleted( Request );
04687 
04688     // Check StreamObj closing needs to be completed
04689     if( m_Status==StreamObjStatusClosed )
04690     {
04691         if( m_PendingRequests == 0 )
04692         {
04693             CompleteClose();
04694 
04695             // Neste caso, o stream associado ao objeto ja foi fechado e nao
04696             // existem mais requisicoes pendentes. Entao, o objeto do stream
04697             // devera ser removido por quem chamou a funcao.
04698             *RemoveStreamObj = true;
04699         }
04700     }
04701     mgr->m_MutexTable->Release();
04702 }

int RioStreamObj::SetSize ( RioObjectSize  ObjectSize,
char *  md5sum,
unsigned long long int  ExcludeStorages 
)

Definition at line 4621 of file server/StreamManager.cpp.

04623 {
04624     return o_object->SetSize( ObjectSize, md5sum, ExcludeStorages );
04625 }

int RioStreamObj::SetVideoRate ( unsigned int  VideoRate  ) 

SetVideoRate funcao usada pela implementacao controle de fluxo para alterar a taxa de transmissao do video (esta funcao sera usada pelo novo metodo remoto da Object Manager, que sera usado pelo riosh para alterar a taxa de transmissao do video).

Parameters:
VideoRate nova taxa de transmissao do video.
Returns:
S_OK caso a taxa tenha sido alterada com sucesso, e o codigo de erro caso nao tenha sido possivel alterar a taxa do video.

Definition at line 4781 of file server/StreamManager.cpp.

04782 {
04783     return o_object->SetVideoRate( VideoRate );
04784 }

RioStream * RioStreamObj::Stream (  ) 

Definition at line 4746 of file server/StreamManager.cpp.

04747 {
04748     return o_stream;
04749 }


Friends And Related Function Documentation

friend class RioStream [friend]

Definition at line 323 of file server/StreamManager.h.


Field Documentation

Definition at line 318 of file server/StreamManager.h.

Definition at line 317 of file server/StreamManager.h.

Definition at line 319 of file server/StreamManager.h.

Definition at line 321 of file server/StreamManager.h.

Definition at line 320 of file server/StreamManager.h.


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