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

📄 socket_retransmit_timing2_protocol_handler.cpp

📁 程序实现了在ip协议之上加一层RUDP协议
💻 CPP
字号:
// SOCKET_ReTransmit_Timing2_Protocol_Handler.cpp: implementation of the SOCKET_ReTransmit_Timing2_Protocol_Handler class.
//
//////////////////////////////////////////////////////////////////////

#include "SOCKET_ReTransmit_Timing2_Protocol_Handler.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SOCKET_ReTransmit_Timing2_Protocol_Handler* SOCKET_ReTransmit_Timing2_Protocol_Handler::pinstance = NULL;// 初始化指针
	
vector<T2_ITEM_STR> SOCKET_ReTransmit_Timing2_Protocol_Handler::m_T2_ReTransmit_Queue_vector;
unsigned short SOCKET_ReTransmit_Timing2_Protocol_Handler::t2_vector_length=0;
Socket_SR* SOCKET_ReTransmit_Timing2_Protocol_Handler::socket_sr_re_ptr;

SOCKET_ReTransmit_Timing2_Protocol_Handler::SOCKET_ReTransmit_Timing2_Protocol_Handler()
{
	t2_vector_length=0;
	init(f_SOCKET_Timing2_Scan);
	socket_sr_re_ptr=Socket_SR::get_instance();
}

SOCKET_ReTransmit_Timing2_Protocol_Handler::~SOCKET_ReTransmit_Timing2_Protocol_Handler()
{
	
}


/*
  factory pattern, make sure there is only one object of this class
*/
SOCKET_ReTransmit_Timing2_Protocol_Handler* SOCKET_ReTransmit_Timing2_Protocol_Handler::get_instance ()
{
	if (pinstance == NULL)
	{
		pinstance = new SOCKET_ReTransmit_Timing2_Protocol_Handler; 
	}
	return pinstance;
}



bool  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_Add(unsigned int seq_packet ,Message  *msg_temp ,Addr_Str  addr_str,RUDP*  rudp)
{
	if(t2_vector_length<1)
	{
		T2_ITEM_STR t2_item_str;
		t2_item_str.deviceID=msg_temp->Data[0];
		t2_item_str.msg=*msg_temp;
		t2_item_str.N=5;
		t2_item_str.packet_ptr=msg_temp->DataPtr;
		t2_item_str.T=current_num;
		t2_item_str.rudp=*rudp;
		t2_item_str.RUDP_Seq=seq_packet;
		t2_item_str.addr_str=addr_str;

		m_T2_ReTransmit_Queue_vector.push_back(t2_item_str);
		t2_vector_length=t2_vector_length + 1;
		return true;
	}
	else
	{
		return false;
	}
}

bool  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_Remove(unsigned int  deviceID,unsigned int  packet_seq)
{
	vector<T2_ITEM_STR>::iterator iter;
	A_FIND_STR a_find;
	a_find.type=0;
	a_find.deviceID=deviceID;
	a_find.seq=packet_seq;
	
	if((iter=find(m_T2_ReTransmit_Queue_vector.begin(),m_T2_ReTransmit_Queue_vector.end(),a_find))!=m_T2_ReTransmit_Queue_vector.end())
	{
		m_T2_ReTransmit_Queue_vector.erase(iter);
		t2_vector_length=t2_vector_length-1;
  }
	else 
	{
		cout<<"the element is not found!"<<endl;
    cout<<endl;
  }
	return true;
}

bool  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_Remove(vector<T2_ITEM_STR>::iterator iter_temp)
{
	m_T2_ReTransmit_Queue_vector.erase(iter_temp);
	return true;
}


void  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_ReSet(unsigned int  deviceID,unsigned int packet_seq)
{
	vector<T2_ITEM_STR>::iterator iter;
	A_FIND_STR a_find;
	a_find.type=0;
	a_find.deviceID=deviceID;
	a_find.seq=packet_seq;
	
	if((iter=find(m_T2_ReTransmit_Queue_vector.begin(),m_T2_ReTransmit_Queue_vector.end(),a_find))!=m_T2_ReTransmit_Queue_vector.end())
	{
		iter->N=iter->N-1;
		iter->T=iter->T-1;
  }
	else 
	{
		cout<<"the element is not found!"<<endl;
    cout<<endl;
  }
}

bool  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_TimeNumOut(vector<T2_ITEM_STR>::iterator iter_temp)
{
	Message msg=Socket_Create_Message_Protocol_Handler::f_SOCKET_App_Send_Failure(&iter_temp->msg);
	m_T2_ReTransmit_Queue_vector.erase(iter_temp);
	return 1;
}

Message  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_find_item(unsigned int deviceID,unsigned int packet_seq)
{
	vector<T2_ITEM_STR>::iterator iter;
	A_FIND_STR a_find;
	a_find.type=0;
	a_find.deviceID=deviceID;
	a_find.seq=packet_seq;
	Message message;
	
	if((iter=find(m_T2_ReTransmit_Queue_vector.begin(),m_T2_ReTransmit_Queue_vector.end(),a_find))!=m_T2_ReTransmit_Queue_vector.end())
	{
		message=iter->msg;
  }
	else 
	{
		cout<<"the element is not found!"<<endl;
    cout<<endl;
  }
	return message;
}

void  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_ReTransmit(vector<T2_ITEM_STR>::iterator iter_temp)
{
	Addr_Str addr_str;
	cout<<"retransmit:deviceID="<<iter_temp->deviceID<<endl;
	cout<<"seq="<<iter_temp->RUDP_Seq<<endl;
	
	SOCKET_ReTransmit_Timing2_Protocol_Handler::socket_sr_re_ptr->create_des_address("192.168.32.9",6666);
	SOCKET_ReTransmit_Timing2_Protocol_Handler::socket_sr_re_ptr->app_rudp(iter_temp->rudp,iter_temp->packet_ptr, (iter_temp->msg).Length);
	SOCKET_ReTransmit_Timing2_Protocol_Handler::socket_sr_re_ptr->send();
}

bool  SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_delete_all_t2_item_struct_by_deviceID(int  deviceID)
{
	return 0;
}

int SOCKET_ReTransmit_Timing2_Protocol_Handler::get_vector_length()
{
	return m_T2_ReTransmit_Queue_vector.size();
}

void  f_SOCKET_Timing2_Scan()
{
	cout<<"timer"<<endl;
	current_num=(current_num+1)%5;
	vector<T2_ITEM_STR>::iterator iter;
	int i;
	int j;
	int n=0;
	T2_ITEM_STR t2_item_str;
	for(i=0;i<SOCKET_ReTransmit_Timing2_Protocol_Handler::t2_vector_length-n;i++)
	{
		iter=SOCKET_ReTransmit_Timing2_Protocol_Handler::m_T2_ReTransmit_Queue_vector.begin();
//		for(j=0;j<n;j++)
//			iter++;
		if((iter->T-current_num)==0)
		{
			if(iter->N!=0)
			{
				SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_ReTransmit(iter);
				cout<<"重发"<<endl;
				t2_item_str.deviceID=iter->deviceID;
				t2_item_str.msg=iter->msg;
				t2_item_str.N=iter->N-1;
				t2_item_str.packet_ptr=iter->packet_ptr;
				t2_item_str.T=iter->T;
				t2_item_str.rudp=iter->rudp;
				t2_item_str.RUDP_Seq=iter->RUDP_Seq;
				t2_item_str.addr_str=iter->addr_str;
				SOCKET_ReTransmit_Timing2_Protocol_Handler::m_T2_ReTransmit_Queue_vector.erase(iter);
				SOCKET_ReTransmit_Timing2_Protocol_Handler::m_T2_ReTransmit_Queue_vector.push_back(t2_item_str);
//				n++;
			}
			else
			{
				SOCKET_ReTransmit_Timing2_Protocol_Handler::f_SOCKET_Timing2_TimeNumOut(iter);
			}
		}
		else
			break;
	}
}

bool SOCKET_ReTransmit_Timing2_Protocol_Handler::is_empty()
{
	return t2_vector_length<1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -