?? ppq.cpp
字號:
// PPQ.cpp: implementation of the PPQ class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PPQ.h"
//#include "RADIX64.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
PPQ::PPQ()
{
this->m_lpbuff =NULL;
}
PPQ::~PPQ()
{
if(this->m_lpbuff!=NULL)
delete []this->m_lpbuff;
}
/******************************************************************
對象序列化
bool DSPAct::Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp)
byClassLevels -- 類的層次
byAttrNo -- 屬性序號
dsp -- 包含序列化或反序化的DSP包
返回: false -- 表示當前對象的屬性還沒有還原完;
true -- 表示當前對象的屬性已經還原完啦
如果序列化函數后,設置的緩沖區為NULL,則表示出錯。
******************************************************************/
bool PPQ::Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp)
{
if(byClassLevels>1)
return DSPACT::Serialize(byClassLevels-1,byAttrNo,dsp);
else
{
switch(byAttrNo)
{
case 1: //序列化第1個屬性
dsp.Write(this->m_bBOOL);
return false;
case 2: //序列化第2個屬性
dsp.Write(this->m_bBool);
return false;
case 3:
dsp.Write((int)this->m_dwValue);
return false;
case 4:
dsp.Write(this->m_iValue);
return false;
case 5:
dsp.Write(this->m_sValue);
return false;
case 6:
dsp.Write(this->m_wValue);
return false;
case 7:
dsp.Write(this->m_cValue);
return false;
case 8:
dsp.Write(this->m_byValue);
return false;
case 9:
dsp.Write(this->m_hgf,true,true);
return false;
case 10:
dsp.Write(this->m_str);
return false;
case 11: //序列化最后一個屬性
dsp.Write(this->m_chBuff,READ_FILE_SIZE,false);
}
}
return true;
}
/*******************************************************************
對象反序列化
bool DSPAct::UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
byClassLevels -- 類的層次
byAttrNo -- 屬性序號
dsp -- 包含序列化或反序化的DSP包
dwLen -- 屬性的長度
返回: false -- 表示當前對象的屬性還沒有還原完;
true -- 表示當前對象的屬性已經還原完啦
如果反序列化函數返回時,設定的緩沖區為NULL或緩沖區的尺寸小于應該設定的尺寸,則表示出錯。
******************************************************************/
bool PPQ::UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
{
//反序列化對象
if(byClassLevels>1)
return DSPACT::UnSerialize(byClassLevels-1,byAttrNo,dsp,dwLen);
else
{
switch(byAttrNo)
{
case 1: //得到第1個屬性
dsp.Read(this->m_bBOOL);
return false;
case 2: //得到第2個屬性
dsp.Read(this->m_bBool);
return false;
case 3:
dsp.Read(this->m_dwValue);
return false;
case 4:
dsp.Read(this->m_iValue);
return false;
case 5:
dsp.Read(this->m_sValue);
return false;
case 6:
dsp.Read(this->m_wValue);
return false;
case 7:
dsp.Read(this->m_cValue);
return false;
case 8:
dsp.Read(this->m_byValue);
return false;
case 9:
dsp.Read(this->m_hgf);
return false;
case 10:
dsp.Read(this->m_str,dwLen);
return false;
case 11: //序列化最后一個屬性
dsp.Read(this->m_chBuff,dwLen);
}
}
return true;
}
/*******************************************************************
接收屬性的一個段
bool DSPACT::AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,bool bLast)
byClassLevels -- 類的層次
byAttrNo -- 屬性序號
lpBuff -- 保存接收值的緩沖區
dwLen -- 緩沖區的長度
bLast -- 表示是否接收到的最后一個段;
true時,表示這次接收到的數據是最后一段數據;
false時,表示這次接收到的數據不是最后一段數據,后面還有數據。
返回: false時,表示失敗;true時,表示正常
******************************************************************/
bool PPQ::AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,bool bLast)
{
if(byClassLevels>1)
return DSPACT::AttrSectRecv(byClassLevels,byAttrNo,lpBuff,dwLen,bLast);
else
{
switch(byAttrNo)
{
case 11:
if(ofs.is_open()==0)
{
//如果文件沒有被打開,則打開文件
ofs.open("ip2.txt",ios::out|ios::binary);
}
ofs.write(lpBuff,dwLen);
if(bLast)
{
ofs.flush();
ofs.close();
}
break;
}
}
return true;
}
/*******************************************************************
傳送屬性的一個段
bool DSPACT::AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue)
byClassLevels -- 類的層次
byAttrNo -- 屬性序號
lpBuff -- 保存傳送緩沖區的首址的變量的指針
wLen -- 保存緩沖區的長度的變量的指針
bContinue -- 表示是否是傳送的最后一個段的變量的地址;
true時,表示這次傳送的數據是最后一段數據;
false時,表示這次傳送的數據不是最后一段數據,后面還有數據。
返回: false -- 表示失敗;
true -- 表示正常
******************************************************************/
bool PPQ::AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue)
{
if(byClassLevels>1)
return DSPACT::AttrSectSend(byClassLevels,byAttrNo,lpBuff,dwLen,bContinue);
else
{
switch(byAttrNo)
{
case 11:
if(ifs.is_open()==0)
{
//如果文件沒有被打開,則打開文件
ifs.open("ip1.txt",ios::in|ios::binary);
//保存接收的長度
dwLen =READ_FILE_SIZE;
//保存接收的緩沖區首址
*lpBuff =this->m_chBuff;
}
ifs.read(*lpBuff,dwLen);
if(ifs.eof())
{
//如果文件已經結束
//得到文件的大小
int size =ifs.tellg();
//得到最后讀取的文件尺寸,設定最后接收的字節數
dwLen =size%dwLen;
//設定不需要再繼續接收
bContinue =false;
//關閉文件
ifs.close();
}
break;
}
}
return true;
}
/******************************************************************
壓縮
bool DSPACT::Compress(char** const lpBuff,DWORD& dwLen)
lpBuff -- 在調用時,指向要壓縮的數據緩沖區的指針,壓縮后指向壓縮數據的緩沖區的首址
dwLen -- 在調用時,為要壓縮的數據的字節個數,壓縮后為壓縮后的數據的字節數
返回:true--壓縮程序有效;false--壓縮程序無效;
當壓縮有效時,必需修改lpBuff為保存壓縮后數據的緩沖區的指針,
dwLen地址內保存為壓縮后的數據的長度
如果設定緩沖區為NULL,則表示壓縮程序失敗。
******************************************************************/
/*bool PPQ::Compress(char** const lpBuff,DWORD& dwLen)
{
RADIX64::_CODER coder;
int size =coder.GetEncodeLen(dwLen);
if(this->m_lpbuff!=NULL)
delete []this->m_lpbuff;
this->m_lpbuff =new char[size];
coder.Encode(*lpBuff,dwLen,this->m_lpbuff);
*lpBuff =this->m_lpbuff;
dwLen =size;
return true;
// return false;
};
*/
/******************************************************************
解壓縮
bool DSPACT::UnCompress(char** const lpBuff,DWORD dwLen,char* lpUnBuff,WORD& wUnLen,bool bStart)
lpBuff -- bStart==false時,需要將接收被壓縮的數據緩沖區的首址保存在該地址中;
bStart==true時,保存被壓縮的數據緩沖區的首址
dwLen -- 被壓縮數據的緩沖區的長度
lpUnBuff-- bStart==true時,接收解壓縮數據的緩沖區的首址
dwUnLen -- bStart==true時,接收解壓縮數據的緩沖區的長度,在解壓縮完成后,保存為解壓縮數據的長度
bStart -- true,表示可以開始進行解壓縮數據;
false,表示該次調用只是指定填充數據的緩沖區,緩沖區的長度不能小于dwLen;
返回:true --解壓縮程序有效;
false --解壓縮程序無效
如果設定緩沖區為NULL,則表示解壓縮程序失敗。
******************************************************************/
/*bool PPQ::UnCompress(char** const lpBuff,DWORD dwLen,char* lpUnBuff,WORD& wUnLen,bool bStart)
{
if(bStart)
{
//解壓縮程序
RADIX64::_CODER coder;
wUnLen =coder.GetDecodeLen(dwLen,*lpBuff);
coder.Decode(*lpBuff,dwLen,lpUnBuff);
}
else
{
//設定解壓縮程序的接收壓縮數據的緩沖區的地址
if(this->m_lpbuff!=NULL)
delete []this->m_lpbuff;
this->m_lpbuff =new char[dwLen];
*lpBuff =this->m_lpbuff;
}
return true;
// return false;
};
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -