|
|
|
@ -4,6 +4,7 @@
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Created by Jean-Luc Deltombe (LX3JL) on 10/12/2016.
|
|
|
|
// Created by Jean-Luc Deltombe (LX3JL) on 10/12/2016.
|
|
|
|
// Copyright © 2016 Jean-Luc Deltombe (LX3JL). All rights reserved.
|
|
|
|
// Copyright © 2016 Jean-Luc Deltombe (LX3JL). All rights reserved.
|
|
|
|
|
|
|
|
// Copyright © 2020 Thomas A. Early, N7TAE
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// This file is part of xlxd.
|
|
|
|
// This file is part of xlxd.
|
|
|
|
@ -35,7 +36,6 @@
|
|
|
|
CPeer::CPeer()
|
|
|
|
CPeer::CPeer()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
::memset(m_ReflectorModules, 0, sizeof(m_ReflectorModules));
|
|
|
|
::memset(m_ReflectorModules, 0, sizeof(m_ReflectorModules));
|
|
|
|
m_Clients.reserve(100);
|
|
|
|
|
|
|
|
m_ConnectTime = std::time(NULL);
|
|
|
|
m_ConnectTime = std::time(NULL);
|
|
|
|
m_LastHeardTime = std::time(NULL);
|
|
|
|
m_LastHeardTime = std::time(NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -68,9 +68,9 @@ CPeer::CPeer(const CPeer &peer)
|
|
|
|
|
|
|
|
|
|
|
|
CPeer::~CPeer()
|
|
|
|
CPeer::~CPeer()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for ( int i = 0; i < m_Clients.size(); i++ )
|
|
|
|
for ( auto it=begin(); it!=end(); it++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
delete m_Clients[i];
|
|
|
|
delete *it;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_Clients.clear();
|
|
|
|
m_Clients.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -80,16 +80,26 @@ CPeer::~CPeer()
|
|
|
|
|
|
|
|
|
|
|
|
bool CPeer::operator ==(const CPeer &peer) const
|
|
|
|
bool CPeer::operator ==(const CPeer &peer) const
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool same = true;
|
|
|
|
if (peer.m_Callsign != m_Callsign)
|
|
|
|
|
|
|
|
return false;
|
|
|
|
same &= (peer.m_Callsign == m_Callsign);
|
|
|
|
if (peer.m_Ip != m_Ip)
|
|
|
|
same &= (peer.m_Ip == m_Ip);
|
|
|
|
return false;
|
|
|
|
same &= (peer.m_Version == m_Version);
|
|
|
|
if (! (peer.m_Version == m_Version))
|
|
|
|
for ( int i = 0; (i < m_Clients.size()) && same ; i++ )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
auto it1 = cbegin();
|
|
|
|
|
|
|
|
auto it2 = peer.cbegin();
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
same &= (peer.m_Clients[i] == m_Clients[i]);
|
|
|
|
if (it1==cend() && it2==peer.cend())
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (it1==cend() || it2==peer.cend())
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (*it1 != *it2)
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
it1++;
|
|
|
|
|
|
|
|
it2++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return same;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -98,42 +108,23 @@ bool CPeer::operator ==(const CPeer &peer) const
|
|
|
|
|
|
|
|
|
|
|
|
bool CPeer::IsAMaster(void) const
|
|
|
|
bool CPeer::IsAMaster(void) const
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool master = false;
|
|
|
|
for ( auto it=cbegin(); it!=cend(); it++ )
|
|
|
|
for ( int i = 0; (i < m_Clients.size()) && !master ; i++ )
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
master |= m_Clients[i]->IsAMaster();
|
|
|
|
if ((*it)->IsAMaster())
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return master;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CPeer::Alive(void)
|
|
|
|
void CPeer::Alive(void)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_LastKeepaliveTime.Now();;
|
|
|
|
m_LastKeepaliveTime.Now();;
|
|
|
|
for ( int i = 0; i < m_Clients.size(); i++ )
|
|
|
|
for ( auto it=begin(); it!=end(); it++ )
|
|
|
|
{
|
|
|
|
|
|
|
|
m_Clients[i]->Alive();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// manage clients
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CClient *CPeer::GetClient(int i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if ( (i >= 0) && (i < m_Clients.size()) )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return m_Clients[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return NULL;
|
|
|
|
(*it)->Alive();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// reporting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// reporting
|
|
|
|
// reporting
|
|
|
|
|
|
|
|
|
|
|
|
|