📄 socket_receive_data_buff.cpp
字号:
// SOCKET_Receive_Data_Buff.cpp: implementation of the SOCKET_Receive_Data_Buff class.
//
//////////////////////////////////////////////////////////////////////
#include "SOCKET_Receive_Data_Buff.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
SOCKET_Receive_Data_Buff* SOCKET_Receive_Data_Buff::pinstance = NULL;// 初始化指针
SOCKET_Receive_Data_Buff::SOCKET_Receive_Data_Buff()
{
buflen=0;
seq_rudpTag=0;
current_iter=m_Data_queue.begin();
current_item=0;
}
SOCKET_Receive_Data_Buff::~SOCKET_Receive_Data_Buff()
{
}
/*
factory pattern, make sure there is only one object of this class
*/
SOCKET_Receive_Data_Buff* SOCKET_Receive_Data_Buff::get_instance()
{
if (pinstance == NULL)
{
pinstance = new SOCKET_Receive_Data_Buff;
}
return pinstance;
}
/*
make each RUDP packet a single RUDPTag, and together with such tag
add RUDP packet to receive buffer
*/
bool SOCKET_Receive_Data_Buff::add(char* buf,int len)
{
Data_Queue_STR bata_queue_str;
unsigned int seq_rudpTag_temp;
seq_rudpTag_temp=seq_rudpTag;
bata_queue_str.RUPDTag=seq_rudpTag;
seq_rudpTag=(seq_rudpTag+1)%SEQ_BUFF_MOL;
memcpy(bata_queue_str.rudp_data,buf,len);
m_Data_queue.insert(map<unsigned int, Data_Queue_STR>::value_type (seq_rudpTag_temp, bata_queue_str));
buflen=buflen+1;
return true;
}
/*
according to the RUDPTag, remove RUDP packet from receive buffer
*/
bool SOCKET_Receive_Data_Buff::remove(unsigned int rudpTag)
{
map<unsigned int, Data_Queue_STR>::iterator iter;
iter = m_Data_queue.find(rudpTag);
if(iter != m_Data_queue.end())
{
cout<<"del a["<<rudpTag<<"]="<<iter->first<<endl;
m_Data_queue.erase(iter);
buflen=buflen-1;
}
else
{
cout<<"remove:not find device!"<<endl;
}
return true;
}
/*
get data_queue_str from receive buffer
*/
Data_Queue_STR* SOCKET_Receive_Data_Buff::get_Data_Buff_item()
{
current_iter=m_Data_queue.begin();
int i;
RUDP* rudp;
for(i=0;i<current_item;i++)
current_iter++;
if(current_iter!=m_Data_queue.end())
{
data_queue_str.RUPDTag=current_iter->second.RUPDTag;
rudp=(RUDP*)current_iter->second.rudp_data;
memcpy(data_queue_str.rudp_data,current_iter->second.rudp_data,rudp->packet_length);
current_item++;
rudp=(RUDP*)data_queue_str.rudp_data;
return &data_queue_str;
}
return 0;
}
void SOCKET_Receive_Data_Buff::print()
{
RUDP* rudp;
map<unsigned int, Data_Queue_STR>::iterator current_iter;
current_iter=m_Data_queue.begin();
Data_Queue_STR* ptr=get_Data_Buff_item();
current_iter = m_Data_queue.find(0);
rudp=(RUDP*)current_iter->second.rudp_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -