Files
libremetaverse/snowcrash/snowflake/ServerList.cpp

111 lines
1.8 KiB
C++
Raw Normal View History

#include "StdAfx.h"
#include ".\ServerList.h"
CServerList::CServerList(void)
{
m_lpServers = NULL;
m_bAddedUserServer = false;
}
CServerList::~CServerList(void)
{
FreeServers();
}
void CServerList::FreeServers(void)
{
CServer *server = m_lpServers;
while (server)
{
if (server->m_lpNext)
{
server = server->m_lpNext;
if (server->m_lpPrev)
SAFE_DELETE(server->m_lpPrev);
}
else
SAFE_DELETE(server);
}
m_lpServers = NULL;
}
bool CServerList::AddServer(CServer *lpServer)
{
CServer *server = NULL;
if (m_lpServers)
{
server = m_lpServers;
while (server->m_lpNext)
server = server->m_lpNext;
server->m_lpNext = lpServer;
if (!server->m_lpNext) return false;
server->m_lpNext->m_lpNext = NULL;
server->m_lpNext->m_lpPrev = server;
if (!m_bAddedUserServer)
{
m_bAddedUserServer = true;
lpServer->m_nType = SERVER_TYPE_USER;
lpServer->SetSimName("User Server");
}
return true;
}
else
{
server = lpServer;
if (!server) return false;
m_lpServers = server;
m_lpServers->m_lpNext = NULL;
m_lpServers->m_lpPrev = NULL;
if (!m_bAddedUserServer)
{
m_bAddedUserServer = true;
lpServer->m_nType = SERVER_TYPE_USER;
lpServer->SetSimName("User Server");
}
return true;
}
return false;
}
CServer *CServerList::FindServer(struct sockaddr_in *address)
{
CServer *server = m_lpServers;
while (server)
{
if (!memcmp(&server->m_address, address, sizeof(server->m_address)))
return server;
server = server->m_lpNext;
}
return NULL;
}
CServer *CServerList::FindServer(int nType)
{
CServer *server = m_lpServers;
while (server)
{
if (server->m_nType == nType)
return server;
server = server->m_lpNext;
}
return NULL;
}