📄 eroomiplist.cpp
字号:
#include "EroomIpList.h"
CEroomIpList::CEroomIpList()
{
mp_Head = NULL;
InitializeCriticalSection(&m_CSection);
}
CEroomIpList::~CEroomIpList()
{
Clear();
DeleteCriticalSection(&m_CSection);
}
EROOMIPLIST *CEroomIpList::Head()
{
return(mp_Head);
}
EROOMIPLIST *CEroomIpList::Insert(char *ap_Ip, int a_Port, int a_Status)
{
EROOMIPLIST *wp_Item;
wp_Item = new EROOMIPLIST;
memset(wp_Item, 0, sizeof(EROOMIPLIST));
wp_Item->m_Ip = inet_addr(ap_Ip);
wp_Item->m_Port = htons(a_Port);
wp_Item->m_Status = a_Status;
return(Insert(wp_Item));
}
EROOMIPLIST *CEroomIpList::Insert(EROOMIPLIST *ap_Item)
{
EROOMIPLIST *wp_Item;
EnterCriticalSection(&m_CSection);
ap_Item->mp_Next = NULL;
ap_Item->mp_Prev = NULL;
if(!mp_Head) {
mp_Head = ap_Item;
mp_Head->mp_Next = NULL;
mp_Head->mp_Prev = NULL;
} else if(ap_Item->m_Ip < mp_Head->m_Ip) {
mp_Head->mp_Prev = ap_Item;
ap_Item->mp_Next = mp_Head;
ap_Item->mp_Prev = NULL;
mp_Head = ap_Item;
} else {
wp_Item = mp_Head;
while(wp_Item->mp_Next) {
if(ap_Item->m_Ip < wp_Item->m_Ip) {
break;
}
wp_Item = wp_Item->mp_Next;
}
if(ap_Item->m_Ip == wp_Item->m_Ip) { // 悼老茄巴篮 倾侩 救窃
if(ap_Item->m_Port == wp_Item->m_Port) {
delete ap_Item;
LeaveCriticalSection(&m_CSection);
return(NULL);
}
}
if(wp_Item->mp_Next) {
wp_Item->mp_Next->mp_Prev = ap_Item;
}
ap_Item->mp_Next = wp_Item->mp_Next;
wp_Item->mp_Next = ap_Item;
ap_Item->mp_Prev = wp_Item;
}
LeaveCriticalSection(&m_CSection);
return(ap_Item);
}
int CEroomIpList::Delete(char *ap_Ip, int a_Port)
{
EROOMIPLIST *wp_Item;
wp_Item = Find(ap_Ip, a_Port);
if(wp_Item) {
return(Delete(wp_Item));
}
return(-1);
}
int CEroomIpList::Delete(EROOMIPLIST *ap_Item)
{
if(!ap_Item) {
return(-1);
}
EnterCriticalSection(&m_CSection);
if(ap_Item->mp_Prev) {
ap_Item->mp_Prev->mp_Next = ap_Item->mp_Next;
}
if(ap_Item->mp_Next) {
ap_Item->mp_Next->mp_Prev = ap_Item->mp_Prev;
}
if(ap_Item == mp_Head) {
mp_Head = ap_Item->mp_Next;
}
ap_Item->mp_Prev = NULL;
ap_Item->mp_Next = NULL;
delete ap_Item;
LeaveCriticalSection(&m_CSection);
return(1);
}
int CEroomIpList::Clear()
{
EROOMIPLIST *wp_Item;
EROOMIPLIST *wp_DelItem;
EnterCriticalSection(&m_CSection);
wp_Item = Head();
while(wp_Item) {
wp_DelItem = wp_Item;
wp_Item = wp_Item->mp_Next;
wp_DelItem->mp_Next = NULL;
wp_DelItem->mp_Prev = NULL;
delete wp_DelItem;
}
mp_Head = NULL;
LeaveCriticalSection(&m_CSection);
return(1);
}
EROOMIPLIST *CEroomIpList::Find(char *ap_Ip, int a_Port)
{
EROOMIPLIST *wp_Item;
unsigned long w_Ip;
unsigned short w_Port;
w_Ip = inet_addr(ap_Ip);
w_Port = htons(a_Port);
wp_Item = Head();
while(wp_Item) {
if(wp_Item->m_Ip == w_Ip && wp_Item->m_Port == a_Port) {
return(wp_Item);
}
wp_Item = wp_Item->mp_Next;
}
return(NULL);
}
void CEroomIpList::SetStatus(char *ap_Ip, int a_Port, int a_Status)
{
EROOMIPLIST *wp_Item;
wp_Item = Find(ap_Ip, a_Port);
if(wp_Item) {
wp_Item->m_Status = a_Status;
}
}
void CEroomIpList::AddStatus(char *ap_Ip, int a_Port, int a_Status)
{
EROOMIPLIST *wp_Item;
wp_Item = Find(ap_Ip, a_Port);
if(wp_Item) {
wp_Item->m_Status |= a_Status;
}
}
void CEroomIpList::DelStatus(char *ap_Ip, int a_Port, int a_Status)
{
EROOMIPLIST *wp_Item;
wp_Item = Find(ap_Ip, a_Port);
if(wp_Item) {
wp_Item->m_Status &= ~a_Status;
}
}
int CEroomIpList::GetStatus(char *ap_Ip, int a_Port)
{
EROOMIPLIST *wp_Item;
wp_Item = Find(ap_Ip, a_Port);
if(wp_Item) {
return(wp_Item->m_Status);
}
return(-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -