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

📄 socket_sequence_manager.cpp

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

#include "SOCKET_Sequence_Manager.h"
//#include <iostream.h>


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

SOCKET_Sequence_Manager* SOCKET_Sequence_Manager::pinstance = NULL;// 初始化指针

SOCKET_Sequence_Manager::SOCKET_Sequence_Manager()
{
	
}

SOCKET_Sequence_Manager::~SOCKET_Sequence_Manager()
{
	
}


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


/*
  once a new user login, add correspond Seq_STR struct to 
  map<unsigned int, Seq_STR>
*/
bool SOCKET_Sequence_Manager::add(unsigned int deviceID)
{
	Seq_STR  seq_str;
	seq_str.D_deviceID=deviceID;
	seq_str.s=0;
	seq_str.r=0;
	m_deviceIDSequence_Map.insert(map<unsigned int, Seq_STR>::value_type (deviceID, seq_str));
	return true;
}


/*
  once a user quit for some reasons, delete correspond Seq_STR struct 
  from map<unsigned int, Seq_STR>
*/
bool SOCKET_Sequence_Manager::remove(unsigned int  deviceID)
{
	map<unsigned int, Seq_STR>::iterator seq_iter;
	seq_iter = m_deviceIDSequence_Map.find(deviceID);
	if(seq_iter != m_deviceIDSequence_Map.end())
	{
		cout<<"del a["<<deviceID<<"]="<<seq_iter->first<<endl;
		m_deviceIDSequence_Map.erase(seq_iter);
	}
	else
	{
		cout<<"remove:not find device!"<<endl;	 		     
	}
	return 0;
}


/*
  get the length of the m_deviceIDSequence_Map
*/
int SOCKET_Sequence_Manager::f_get_length()
{
	return m_deviceIDSequence_Map.size();
}


/*
  get current packet'sequence number of the source side
*/
unsigned int SOCKET_Sequence_Manager::f_get_sequence_packet(unsigned int deviceID)
{
	map<unsigned int, Seq_STR>::iterator seq_iter;
	seq_iter = m_deviceIDSequence_Map.find(deviceID);
	if(seq_iter != m_deviceIDSequence_Map.end())
	{
		unsigned int tmp=(seq_iter->second).s;
		(seq_iter->second).s=((seq_iter->second).s + 1)%SEQ_MOL;
		return tmp;
	}
	else
	{
		cout<<"f_get_sequence:not find device!"<<endl;
	}
	return 0;
}


/*
  get the desire packet's sequence number in destination side
*/
unsigned int SOCKET_Sequence_Manager::f_get_desired_packet(unsigned int  deviceID)
{
	map<unsigned int, Seq_STR>::iterator seq_iter;
	seq_iter = m_deviceIDSequence_Map.find(deviceID);
	if(seq_iter != m_deviceIDSequence_Map.end())
	{
		unsigned int tmp=(seq_iter->second).r;
		(seq_iter->second).r=((seq_iter->second).r + 1)%SEQ_MOL;
		return tmp;
	}
	else
	{
    cout<<"f_get_sequence:not find device!"<<endl;
	}
	return 0;
}


/*
   get the desire packet's sequence number in destination side
*/
unsigned int  SOCKET_Sequence_Manager::f_get_desired(unsigned int deviceID)
{
	map<unsigned int, Seq_STR>::iterator seq_iter;
	seq_iter = m_deviceIDSequence_Map.find(deviceID);
	if(seq_iter != m_deviceIDSequence_Map.end())
	{
		return seq_iter->second.r;
	}
	else
	{
		cout<<"f_get_sequence:not find device!"<<endl;
	}
	return 0;
}


/*
  get current packet'sequence number of the source side
*/
unsigned int SOCKET_Sequence_Manager::f_get_sequence(unsigned int  deviceID)
{
	map<unsigned int, Seq_STR>::iterator seq_iter;
	seq_iter = m_deviceIDSequence_Map.find(deviceID);
	if(seq_iter != m_deviceIDSequence_Map.end())
	{
		return seq_iter->second.s;
	}
	else
	{
    cout<<"f_get_sequence:not find device!"<<endl;
	}
	return 0;
}



void SOCKET_Sequence_Manager::print()
{
	map<unsigned int, Seq_STR>::iterator  seq_iter;
	for(seq_iter = m_deviceIDSequence_Map.begin(); seq_iter != m_deviceIDSequence_Map.end(); seq_iter++)
	{
		cout<<"a["<<seq_iter->first<<"]="<<endl;
	}
}




⌨️ 快捷键说明

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