📄 cmultiplex.cpp
字号:
//CMultiplex.cpp
#include "stdafx.h"
#include <afxmt.h>
#include <afxtempl.h>
#include "CByteBuffer.h"
#include "CPacker.h"
#include "CChannel.h"
#include "CMultiplex.h"
//begin of class CMultiplex
CMultiplex::CMultiplex()
{
m_nTotalChannel=6;
pbValidChannel=new BOOL [m_nTotalChannel];
m_nChannel=m_nTotalChannel;
for(int i=0;i<m_nTotalChannel;i++)
pChannelArray[i]=NULL;
}
CMultiplex::~CMultiplex()
{
if(pbValidChannel)
delete pbValidChannel;
}
BOOL CMultiplex::AddAChannel(CSendChannel* pSendChannel)
{
if(!pSendChannel)return FALSE;
int nNumber=pSendChannel->GetChannelNumber();
if(nNumber>=0&&nNumber<m_nTotalChannel)
{
pChannelArray[nNumber]=pSendChannel;
return TRUE;
}
return FALSE;
}
BOOL CMultiplex::DeleteAChannel(int nChannelNumber)
{
if(nChannelNumber>=0&&nChannelNumber<=m_nTotalChannel)
{
pChannelArray[nChannelNumber]=NULL;
return TRUE;
}
return FALSE;
}
/*
int CMultiplex::WhichChannel()
{
static int nChannel=15;
int rv=nChannel;
nChannel--;
if(nChannel<0)
nChannel=15;
return rv;
}
*/
/*
int CMultiplex::DetachStream(BYTE* pbyPacket,int nLength)
{
int nValidLength=0;
for(int i=0;i<m_nTotalChannel;i++)
{
m_nChannel--;
if(pChannelArray[m_nChannel]&&pChannelArray[m_nChannel]->GetCount())
{
if(pChannelArray[m_nChannel]->GetHead().m_nLength+nValidLength>nLength)
{
if(nValidLength==0)
pChannelArray[m_nChannel]->RemoveHead();
if(m_nChannel==0)
m_nChannel=m_nTotalChannel;
return nValidLength;
}
CPacket Packet=pChannelArray[m_nChannel]->RemoveHead();
CopyMemory(pbyPacket+nValidLength,Packet.m_pPacket,Packet.m_nLength);
nValidLength+=Packet.m_nLength;
}
if(m_nChannel==0)
m_nChannel=m_nTotalChannel;
}
return nValidLength;
}
*/
int CMultiplex::DetachStream(BYTE* pbyPacket,int nLength)
{
int nValidLength=0;
for(int i=m_nTotalChannel-1;i>=0;i--)//from 1-4
{
//如果该通道有效且该通道中的packet的个数不为0
if(pChannelArray[i]&&pChannelArray[i]->GetCount())
{
//发送pChannelArray[i]->m_nPriority个packet
for(int j=0;j<=pChannelArray[i]->m_nPriority;j++)
{
//pChannelArray[i]->GetHead().m_nLength----为第i个通道中某一个packet的长度
//如果已经发送的BYTE数目超过所能发送的长度,则退出
if(pChannelArray[i]->GetHead().m_nLength+nValidLength>nLength)
{
if(nValidLength==0)//无效packet
pChannelArray[i]->RemoveHead();
return nValidLength;
}
//将通道中的packet写入复接缓冲,最终pbyPacket中的内容将被写入硬件以发送出去
CopyMemory(pbyPacket+nValidLength,pChannelArray[i]->GetHead().m_pPacket,pChannelArray[i]->GetHead().m_nLength);
nValidLength+=pChannelArray[i]->GetHead().m_nLength;
pChannelArray[i]->RemoveHead();//将通道中的packet删除,以准备发送下一个
}
}
}
return nValidLength;
}
int CMultiplex::GetLength(void)
{
int nLength=0;
for(int i=0;i<m_nTotalChannel;i++)
{
if(pChannelArray[i]!=NULL)
nLength+=pChannelArray[i]->GetLength();
}
return nLength;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -