📄 networkproxy.cpp
字号:
#include "stdafx.h"
#include "networkproxy.h"
NetworkProxy::NetworkProxy()
{
bInited = false;
}
NetworkProxy::~NetworkProxy()
{
bInited = false;
localTcp.Close();
}
bool NetworkProxy::_Init()
{
if( ! localTcp.InitNetwork() )
return false;
if( localTcp.Connect("127.0.0.1", NETSTUB_LISTENPORT) <= 0 )
return false;
return true;
}
bool NetworkProxy::Request(
LPCTSTR url // in, 要播放的文件
)
{
CriticalSection::Owner lock(msgLock);
if( !bInited && !(bInited = _Init()) )
return false;
// Send Request
UINT urlLen = (UINT)strlen(url) + 1;
if( ! localTcp.SendEx(MSG_REQUEST, 0, (PBYTE)url, urlLen) )
return false;
// Receive Response
UINT8 msgType, retvalue;
UINT urlLen1 = 0;
PBYTE data = NULL;
if( ! localTcp.RecvEx(msgType, retvalue, data, urlLen1, false) )
return false;
if( msgType!=MSG_REQUEST || retvalue ==0 )
return false;
return true;
}
// 停止下载当前频道
void NetworkProxy::Stop()
{
CriticalSection::Owner lock(msgLock);
if( ! bInited )
return;
// Send Request
PBYTE data = NULL;
UINT dataLen = 0;
localTcp.SendEx(MSG_STOP, 0, data, dataLen); // no need to judge whether send is succeed.
localTcp.Close();
bInited = false;
}
// 发送要显示的消息给本地进程
void NetworkProxy::SendMsgToShow(
LPCTSTR msg, // in, 要显示的信息
const UINT len // in, 要显示的消息的长度
)
{
CriticalSection::Owner lock(msgLock);
if( ! bInited )
return;
// Send Request
if( ! localTcp.SendEx(MSG_SENDMSGTOSHOW, 0, (PBYTE)msg, len+1) )
return;
// Receive Response
UINT8 msgType, sub;
UINT len1 = 0;
PBYTE data = NULL;
if( ! localTcp.RecvEx(msgType, sub, data, len1, false) )
return;
if( MSG_SENDMSGTOSHOW!=msgType )
return;
}
// 获取数据,可能得到普通Sample或者MediaType(参考struct SampleHeader的注释)
int NetworkProxy::GetData(
SampleHeader& header, // out, 数据头
PBYTE& pData, // out, 存储数据的缓冲区
const UINT maxSize, // in, 缓冲区的长度
const bool bAudio, // in, 获取音频还是视频
const bool bKeySample // in, 是否寻找关键帧
)
{
CriticalSection::Owner lock(msgLock);
if( ! bInited )
return -1;
// Send Request
UINT8 subMsgType = ((bAudio?1:0)<<1) | (bKeySample?1:0);
if( ! localTcp.SendEx(MSG_GETDATA, subMsgType, (PBYTE)&maxSize, sizeof(UINT)) )
return -1;
// Receive Response
UINT8 msgType, retvalue;
UINT headerLen=0, dataLen=0;
PBYTE headerData = NULL;
PBYTE recvData = NULL;
if( ! localTcp.RecvEx2(msgType, retvalue, headerData, headerLen, recvData, dataLen) )
return -1;
INT8 ret = (INT8)retvalue;
if( msgType!=MSG_GETDATA )
return -1;
else if( ret > 0 )
{
if( headerLen!=sizeof(SampleHeader) || dataLen>maxSize )
return -1;
memcpy(&header, headerData, headerLen);
memcpy(pData, recvData, dataLen);
return ret;
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -