#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. | |
RioStream * | Stream () |
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) | |
RioStreamObj & | operator= (const RioStreamObj &x) |
void | CompleteClose () |
Private Attributes | |
StreamObjStatus | m_Status |
int | m_PendingRequests |
CStreamManager * | o_mgr |
RioStream * | o_stream |
RioObject * | o_object |
Friends | |
class | RioStream |
Definition at line 308 of file server/StreamManager.h.
enum RioStreamObj::StreamObjStatus [private] |
Definition at line 311 of file server/StreamManager.h.
00312 { 00313 StreamObjStatusClosed = 0, // closed or closing 00314 StreamObjStatusOpened = 1 // Opened and active 00315 } StreamObjStatus;
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 }
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.
RemoveStreamObj | ponteiro para um valor booleano, que informara se o objeto precisa ser removido depois de ter sido fechado. |
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.
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).
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). |
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.
int RioStreamObj::GetType | ( | short * | Type | ) |
Definition at line 4627 of file server/StreamManager.cpp.
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).
VideoRate | ponteiro para o inteiro nao sinalizado que armazenara a taxa de transmissao do video. |
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.
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. |
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.
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.
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).
VideoRate | nova taxa de transmissao 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 }
friend class RioStream [friend] |
Definition at line 323 of file server/StreamManager.h.
int RioStreamObj::m_PendingRequests [private] |
Definition at line 318 of file server/StreamManager.h.
StreamObjStatus RioStreamObj::m_Status [private] |
Definition at line 317 of file server/StreamManager.h.
CStreamManager* RioStreamObj::o_mgr [private] |
Definition at line 319 of file server/StreamManager.h.
RioObject* RioStreamObj::o_object [private] |
Definition at line 321 of file server/StreamManager.h.
RioStream* RioStreamObj::o_stream [private] |
Definition at line 320 of file server/StreamManager.h.