⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket_receive_data_buff.cpp

📁 程序实现了在ip协议之上加一层RUDP协议
💻 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 + -