📄 cstreamsocket2.cpp
字号:
//
// CStreamSocket2.cpp
//
/*-----------------------------------------------------*\
HQ Tech, Make Technology Easy!
More information, please go to http://hqtech.nease.net.
/*-----------------------------------------------------*/
#include <streams.h>
#include "CStreamSocket2.h"
#include "CMediaController.h"
#include "defines.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//////////////////////////////////////////////////////////////////////////////
CStreamSocket2::CStreamSocket2()
{
mSocket = INVALID_SOCKET;
mIsReceiving = FALSE;
mRcvThread = NULL;
mController = NULL;
}
CStreamSocket2::~CStreamSocket2()
{
Detach();
StopReceiving();
}
void CStreamSocket2::SetController(CMediaController * inController)
{
mController = inController;
}
BOOL CStreamSocket2::Attach(SOCKET inSocket)
{
if (mSocket != INVALID_SOCKET)
{
return FALSE;
}
mSocket = inSocket;
return TRUE;
}
void CStreamSocket2::Detach(void)
{
if (mSocket != INVALID_SOCKET)
{
closesocket(mSocket);
mSocket = INVALID_SOCKET;
}
}
BOOL CStreamSocket2::StartReceiving(void)
{
if (mSocket != INVALID_SOCKET)
{
if (mIsReceiving)
{
return TRUE;
}
DWORD threadID = 0;
mRcvThread = CreateThread(NULL, 0, ReceivingThrd,
this, 0, &threadID);
return (mRcvThread != NULL);
}
return FALSE;
}
void CStreamSocket2::StopReceiving(void)
{
if (mIsReceiving)
{
mIsReceiving = FALSE;
Detach();
if (mRcvThread != NULL)
{
WaitForSingleObject(mRcvThread, INFINITE);
mRcvThread = NULL;
}
}
}
DWORD WINAPI CStreamSocket2::ReceivingThrd(void * pParam)
{
CStreamSocket2 * pSock = (CStreamSocket2 *) pParam;
if (pSock)
{
pSock->mIsReceiving = TRUE;
pSock->ReceivingLoop();
return 1;
}
return 0;
}
// Main work here!
void CStreamSocket2::ReceivingLoop(void)
{
char buf[PACK_SIZE];
int toread = PACK_SIZE;
int bytes = 0;
while (mIsReceiving)
{
bytes = recv(mSocket, buf, toread, 0);
if (bytes == 0)
{
// TRACE("socket closed\n");
mIsReceiving = FALSE;
break;
}
else if (bytes == SOCKET_ERROR)
{
// TRACE("recv socket error, code:%d\n", WSAGetLastError());
mIsReceiving = FALSE;
break;
}
mIsReceiving = mController->AddData(buf, bytes);
}
mController->EndOfStream();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -