📄 socket_sequence_manager.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 + -