?? memstream.cpp
字號:
// MemStream.cpp: implementation of the CMemStream class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Client.h"
#include "MemStream.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemStream::CMemStream()
{
m_llPosition = 0;
m_pMutex = CreateMutex(NULL,FALSE,NULL);
m_pbBuffer = NULL;
m_pbBuffer = NULL;
m_dwBytesToRead = 0;
m_dwBytesHaveRead = 0;
//m_EventSink = NULL;
}
CMemStream::~CMemStream()
{
}
HRESULT CMemStream::Block()
{
WaitForSingleObject(m_pMutex,INFINITE);
return S_OK;
}
HRESULT CMemStream::ReleaseBlock()
{
ReleaseMutex(m_pMutex);
return S_OK;
}
void CMemStream::SetRTPSession(RTPSession *rtpSession) {
m_rtpSession = rtpSession;
}
HRESULT CMemStream::SetPointer(LONGLONG llPos)
{
if (llPos < 0 || llPos > m_llLength) {
return S_FALSE;
} else {
m_llPosition = llPos;
return S_OK;
}
}
HRESULT CMemStream::Read(PBYTE pbBuffer, DWORD dwBytesToRead,
BOOL bAlign, LPDWORD pdwBytesRead)
{
/*if(m_EventSink)
{
HRESULT hr = m_EventSink->OnPlayerNeedData(m_llPosition,dwBytesToRead,pdwBytesRead,pbBuffer);
if(SUCCEEDED(hr))
m_llPosition+=dwBytesToRead;
return hr;
}*/
//_MSGTYPE msgType(QUEST_DATA);
//_MSGSUBTYPE msgSubType(OTHER);
CTRLMSG msg;
m_dwBytesHaveRead = 0;
m_dwBytesToRead = dwBytesToRead;
m_pbBuffer = NULL;
msg.msgType = QUEST_DATA;
msg.msgSubType = OTHER;
msg.lPos = m_llPosition;
msg.dwBytesToRead = dwBytesToRead;
msg.dwLength = 0;
m_bWaiting = TRUE;
m_rtpSession->SendPacket(&msg,sizeof(CTRLMSG));
//ASSERT(m_llPosition + (LONGLONG)dwBytesToRead <= m_llLength);
while(m_bWaiting)
{
Sleep(1);
}
ZeroMemory(pbBuffer,dwBytesToRead);
memcpy(pbBuffer,m_pbBuffer,dwBytesToRead);
m_llPosition += dwBytesToRead;
*pdwBytesRead = dwBytesToRead;
delete m_pbBuffer;
m_pbBuffer = NULL;
return S_OK;
//return E_POINTER;
}
LONGLONG CMemStream::Size(LONGLONG *pSizeAvailable)
{
*pSizeAvailable = m_llLength;
return m_llLength;
}
DWORD CMemStream::Alignment()
{
return 1;
}
void CMemStream::Lock()
{
m_csLock.Lock();
}
void CMemStream::Unlock()
{
m_csLock.Unlock();
}
void CMemStream::SetMediaLength(LONGLONG lMediaLength)
{
m_llLength = lMediaLength;
//m_llLength = -1;
}
void CMemStream::FillBuffer(char* pbData,int nLength)
{
//CTRLMSG msg;
memcpy(&m_msg,pbData,sizeof(CTRLMSG));
switch(m_msg.msgType) {
case REPLY_DATA:
if(NULL == m_pbBuffer) {
m_pbBuffer = new char[m_dwBytesToRead];
m_dwBytesHaveRead = 0;
//m_dwBytesToRead = 0;
}
//TRACE("Receive %d Bytes\n",m_msg.dwLength);
if(m_dwBytesHaveRead + m_msg.dwLength < m_dwBytesToRead) {
memcpy(m_pbBuffer + m_dwBytesHaveRead,pbData + sizeof(CTRLMSG),m_msg.dwLength);
m_dwBytesHaveRead += m_msg.dwLength;
return;
}
else {
memcpy(m_pbBuffer + m_dwBytesHaveRead,pbData + sizeof(CTRLMSG),m_msg.dwLength);
m_dwBytesHaveRead = m_dwBytesToRead;
}
break;
case REPLY_LENGTH:
SetMediaLength(m_msg.lPos);
break;
}
m_bWaiting = FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -