159 lines
5.2 KiB
C++
159 lines
5.2 KiB
C++
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
/*
|
|
* SAD_DetectedServer holds information about SPIT Server detected by ServerAutoDetection (SAD).
|
|
* File: SAD_DetectedServer.cpp
|
|
* Author: Hagi
|
|
*
|
|
* Created on 4. Mai 2019, 13:51
|
|
*/
|
|
|
|
#include "SAD_DetectedServer.hpp"
|
|
#include "esp_log.h"
|
|
|
|
static const char * TAG = "SpitSrv";
|
|
|
|
unordered_map<string, SAD_DetectedServer*> SAD_DetectedServer::s_DetectedServers;
|
|
|
|
SAD_DetectedServer::~SAD_DetectedServer() {
|
|
}
|
|
//----- Detected Server -----
|
|
SAD_DetectedServer::SAD_DetectedServer() {
|
|
m_ID = "";
|
|
m_Name = "";
|
|
m_ComputerName = "";
|
|
m_ClientIP = "";
|
|
m_Port = "";
|
|
m_Additions = "";
|
|
m_IPIsIP4 = false;
|
|
}
|
|
|
|
void SAD_DetectedServer::cycleStart() {
|
|
for (auto i = s_DetectedServers.begin(); i != s_DetectedServers.end(); i++) {
|
|
i->second->startCycleSAD();
|
|
}
|
|
}
|
|
void SAD_DetectedServer::cycleEnd(I_SAD_Client& sADClientInterface) {
|
|
list<SAD_DetectedServer*> o_LostServers;
|
|
list<SAD_DetectedServer*> o_NewServers;
|
|
SAD_DetectedServer* ptrDetectedServer;
|
|
{
|
|
for (auto i = s_DetectedServers.begin(); i != s_DetectedServers.end(); i++) {
|
|
ptrDetectedServer = i->second;
|
|
if (ptrDetectedServer->getFoundAgain() == false) {
|
|
o_LostServers.push_back(ptrDetectedServer);
|
|
ptrDetectedServer->endCycleSAD();
|
|
}
|
|
else if (ptrDetectedServer->getNew()) {
|
|
o_NewServers.push_back(ptrDetectedServer);
|
|
ptrDetectedServer->setNew(false);
|
|
ptrDetectedServer->endCycleSAD();
|
|
}
|
|
else if (ptrDetectedServer->getChanged()) {
|
|
ptrDetectedServer->endCycleSAD();
|
|
}
|
|
else {
|
|
ptrDetectedServer->endCycleSAD();
|
|
}
|
|
}
|
|
}
|
|
//Notify client interface about lost servers
|
|
for (auto i = o_LostServers.begin(); i != o_LostServers.end(); i++) {
|
|
ptrDetectedServer = *i;
|
|
sADClientInterface.eventServerLost(ptrDetectedServer->getID(), ptrDetectedServer->getName(),
|
|
ptrDetectedServer->getComputerName(), ptrDetectedServer->getIP(), ptrDetectedServer->getPort(), ptrDetectedServer->getAdditions(),
|
|
ptrDetectedServer->getClientIP(),
|
|
ptrDetectedServer->getIpIsIP4());
|
|
}
|
|
//Remove lost servers
|
|
for (auto i = o_LostServers.begin(); i != o_LostServers.end(); i++) {
|
|
ptrDetectedServer = *i;
|
|
removeDetectedServer(ptrDetectedServer);
|
|
}
|
|
o_LostServers.clear();
|
|
|
|
for (auto i = o_NewServers.begin(); i != o_NewServers.end(); i++) {
|
|
ptrDetectedServer = *i;
|
|
sADClientInterface.eventServerDetected(ptrDetectedServer->getID(), ptrDetectedServer->getName(),
|
|
ptrDetectedServer->getComputerName(), ptrDetectedServer->getIP(), ptrDetectedServer->getPort(), ptrDetectedServer->getAdditions(),
|
|
ptrDetectedServer->getClientIP(),
|
|
ptrDetectedServer->getIpIsIP4());
|
|
}
|
|
o_NewServers.clear();
|
|
|
|
}
|
|
/**
|
|
* Used by SAD_Client to add a found SPITServer - don't use this manually
|
|
* @param p_IsIP4 true = the server is reached via a IP4 address<br>false = the server is reahed via a IP6 address
|
|
* @param p_ServerID the id of the server, every instance of a SPITServer has an own id
|
|
* @param p_ServerParams the server's parameter
|
|
*/
|
|
void SAD_DetectedServer::addDetectedServer(bool p_IsIP4, string p_ServerID, string p_ServerParams[]) {
|
|
SAD_DetectedServer* ptrDetectedServer;
|
|
{
|
|
auto i = s_DetectedServers.find(p_ServerID);
|
|
if (i != s_DetectedServers.end()) {
|
|
ptrDetectedServer = i->second;
|
|
}
|
|
else {
|
|
ptrDetectedServer = new SAD_DetectedServer();
|
|
ptrDetectedServer->setID(p_ServerParams[PARAMINDEX_ID]);
|
|
ptrDetectedServer->setNew(true);
|
|
}
|
|
ptrDetectedServer->setFoundAgain();
|
|
|
|
//second prefer IP4
|
|
if (p_IsIP4 == true) {
|
|
ptrDetectedServer->setIP(p_ServerParams[PARAMINDEX_IP]);
|
|
ptrDetectedServer->setIPIsIP4(true);
|
|
ptrDetectedServer->setClientIP(p_ServerParams[PARAMINDEX_CLIENTIP]);
|
|
}
|
|
else if (ptrDetectedServer->getIpIsIP4() == false){
|
|
ptrDetectedServer->setIP(p_ServerParams[PARAMINDEX_IP]);
|
|
ptrDetectedServer->setClientIP(p_ServerParams[PARAMINDEX_CLIENTIP]);
|
|
}
|
|
ptrDetectedServer->setName(p_ServerParams[PARAMINDEX_NAME]);
|
|
ptrDetectedServer->setComputerName(p_ServerParams[PARAMINDEX_COMPUTERNAME]);
|
|
ptrDetectedServer->setPort(p_ServerParams[PARAMINDEX_PORT]);
|
|
ptrDetectedServer->setAdditions(p_ServerParams[PARAMINDEX_ADDITIONS]);
|
|
|
|
s_DetectedServers[ptrDetectedServer->getID()] = ptrDetectedServer;
|
|
}
|
|
}
|
|
/**
|
|
* Used by SAD_Client to remove a SPITServer - don't use this manually
|
|
* @param p_DetectedServer
|
|
*/
|
|
void SAD_DetectedServer::removeDetectedServer(SAD_DetectedServer* p_DetectedServer) {
|
|
SAD_DetectedServer* o_DetectedServer;
|
|
{
|
|
auto i = s_DetectedServers.find(p_DetectedServer->getID());
|
|
if (i != s_DetectedServers.end()) {
|
|
o_DetectedServer = i->second;
|
|
i = s_DetectedServers.erase(i);
|
|
delete o_DetectedServer;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Used by SAD_Client to clear all found SPITServers - don't use this manually
|
|
*/
|
|
void SAD_DetectedServer::clearDetectedServers() {
|
|
SAD_DetectedServer* ptrDetectedServer;
|
|
{
|
|
for (auto i = s_DetectedServers.begin(); i != s_DetectedServers.end(); i++) {
|
|
ptrDetectedServer = i->second;
|
|
i = s_DetectedServers.erase(i);
|
|
delete ptrDetectedServer;
|
|
if (i == s_DetectedServers.end()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|