📄 cchannel.h
字号:
//CChannel.h
#ifndef __CCHANNEL_H__
#define __CCHANNEL_H__
#include "afxmt.h"
#include "afxtempl.h"
#include "CByteBuffer.h"
#include "CPacker.h"
#define FS_VALID 1
#define FS_INVALID 0
typedef void ChannelCallBackFunc(BYTE* pFrame,int nLength,BOOL bFrameState,LPVOID lpUserData);
typedef ChannelCallBackFunc* PChannelCallBackFunc;
class CMultiplex;
//begin of class CPacket
class CPacket
{
friend class CMultiplex;
friend class CDemultiplex;
public:
CPacket(BYTE* pPacket=NULL,int nLength=0);
CPacket(const CPacket& Packet);
virtual ~CPacket(){if(m_pPacket)delete m_pPacket;}
CPacket& operator=(const CPacket& Packet);
BYTE* m_pPacket;
int m_nLength;
};
inline CPacket::CPacket(BYTE* pPacket,int nLength)
{
m_pPacket=new BYTE[nLength];
CopyMemory(m_pPacket,pPacket,nLength);
m_nLength=nLength;
}
//class CChannel
class CChannel
{
friend class CMultiplex;
friend class CDemultiplex;
protected:
int m_nChannelNumber;
int m_nPriority;
CCriticalSection m_LockSection;
public:
CChannel(int nChannelNumber=0,int nPriority=8);
//void Lock();//{m_LockSection.Lock();}
//void Unlock(){m_LockSection.Unlock();}
int GetChannelNumber(void);
int GetChannelPriority(void);
};
inline int CChannel::GetChannelNumber(void)
{
// Lock();
CSingleLock sLock(&m_LockSection);
sLock.Lock();
int rv=m_nChannelNumber;
//Unlock();
return rv;
}
inline int CChannel::GetChannelPriority(void)
{
// Lock();
CSingleLock sLock(&m_LockSection);
sLock.Lock();
int rv=m_nPriority;
//Unlock();
return rv;
}
//class CSendChannel
class CSendChannel:public CChannel
{
friend class CMultiplex;
friend class CDemultiplex;
private:
int m_nMaxPacketLength;
int m_nMaxPackedPacketLength;
BYTE* m_pbyPackedPacket;
CList<CPacket,CPacket&> m_PacketList;
public:
void ClearChannelData();
CSendChannel(int nChannelNumber=0,int nPriority=8,int nMaxPacketLength=1024);
virtual ~CSendChannel(){if(m_pbyPackedPacket)delete m_pbyPackedPacket;}
BOOL SendData(BYTE* pbyFrame,int nFrameLength);
int GetLength(void);
int GetCount(void);
CPacket GetPacket(int nPos);
CPacket GetHead(void);
CPacket RemoveHead(void);
};
//class CReceiveChannel
class CReceiveChannel:public CChannel
{
friend class CMultiplex;
friend class CDemultiplex;
private:
PChannelCallBackFunc m_pChannelCallBackFunc;
int m_nMaxFrameLength;
int m_nValidLength;
BYTE* m_pFrameBuffer;
LPVOID m_lpUserData;
public:
CReceiveChannel(int nChannelNumber=0,int nPriority=8,int nMaxFrameLength=4096,
PChannelCallBackFunc pChannelCallBackFunc=NULL);
virtual ~CReceiveChannel(){if(m_pFrameBuffer)delete m_pFrameBuffer;}
void InputPacket(BYTE* pbyData,int nLength,BOOL bIsEndPacket=FALSE);
void Initialize(LPVOID lpUserData);
};
#endif//__CCHANNEL_H__
//end of CChannel.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -