refactoring Sever detection

This commit is contained in:
2025-04-05 23:01:13 +02:00
parent a3e487f2f1
commit f891f317fb
4 changed files with 101 additions and 156 deletions
-105
View File
@@ -1,105 +0,0 @@
/*
* 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;
void SAD_DetectedServer::setProjectName(const string& projName) {
if ((m_ServerProjectName.compare(projName) != 0) && (m_New == false)) {
m_Changed = true;
}
m_ServerProjectName = projName;
}
void SAD_DetectedServer::cycleStart() {
for (auto i = s_DetectedServers.begin(); i != s_DetectedServers.end(); i++) {
i->second->resetFlags();
}
}
void SAD_DetectedServer::cycleEnd(I_SAD_Client &sadClient) {
for (auto &srv : s_DetectedServers) {
SAD_DetectedServer *ptrDetectedServer = srv.second;
if (ptrDetectedServer->getFoundAgain() == false) {
sadClient.eventServerLost(*ptrDetectedServer);
removeDetectedServer(*ptrDetectedServer);
} else if (ptrDetectedServer->getNew()) {
ptrDetectedServer->setNew(false);
sadClient.eventServerDetected(*ptrDetectedServer);
} else if (ptrDetectedServer->getChanged()) {
sadClient.eventServerChanged(*ptrDetectedServer);
}
}
}
/**
* Used by SAD_Client to add a found SPITServer - don't use this manually
* @param id 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(string &id, string p_ServerParams[]) {
SAD_DetectedServer *detectedServer;
{
auto i = s_DetectedServers.find(id);
if (i != s_DetectedServers.end()) {
detectedServer = i->second;
detectedServer->setFoundAgain();
} else {
detectedServer = new SAD_DetectedServer();
detectedServer->setID(p_ServerParams[PARAMINDEX_ID]);
detectedServer->setNew(true);
}
detectedServer->setIP(p_ServerParams[PARAMINDEX_IP]);
detectedServer->setClientIP(p_ServerParams[PARAMINDEX_CLIENTIP]);
detectedServer->setName(p_ServerParams[PARAMINDEX_NAME]);
detectedServer->setComputerName(p_ServerParams[PARAMINDEX_COMPUTERNAME]);
detectedServer->setPort(p_ServerParams[PARAMINDEX_PORT]);
detectedServer->setAdditions(p_ServerParams[PARAMINDEX_ADDITIONS]);
detectedServer->setProjectName(p_ServerParams[PARAMINDEX_SERVERPROJECTNAME]);
s_DetectedServers[detectedServer->getID()] = detectedServer;
}
}
/**
* Used by SAD_Client to remove a SPITServer - don't use this manually
* @param p_DetectedServer
*/
void SAD_DetectedServer::removeDetectedServer(SAD_DetectedServer &server) {
auto i = s_DetectedServers.find(server.getID());
if (i != s_DetectedServers.end()) {
SAD_DetectedServer *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() {
for (auto i = s_DetectedServers.begin(); i != s_DetectedServers.end(); i++) {
SAD_DetectedServer *ptrDetectedServer = i->second;
i = s_DetectedServers.erase(i);
delete ptrDetectedServer;
}
}
const SAD_DetectedServer &SAD_DetectedServer::getRefDetectedServer(const string &id) {
return *s_DetectedServers.at(id);
}
+17 -6
View File
@@ -1488,6 +1488,7 @@ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p
}
fos::Semaphore SPIT_Client::sStartSad;
unordered_map<string, unique_ptr<SAD_DetectedServer>> SAD_DetectedServer::sKnownServers;
void SPIT_Client::processSocketTask(SPIT_Client &instance) {
ESP_LOGI(TAG, "Starting Socket managing");
@@ -1507,7 +1508,7 @@ void SPIT_Client::processSocketTask(SPIT_Client &instance) {
if (instance.abortSearch)
break;
SAD_DetectedServer::cycleStart();
SAD_DetectedServer::resetServerFlags();
string stringBroadcastIP4 = instance.mSPITSocket->mOwnIp.getBroadcastIP4();
instance.mSPITSocket->sendMessageTo(stringBroadcastIP4, SERVERAUTODETECT_PORT, stringDatagram.data(), intDatagramLength);
{
@@ -1536,7 +1537,7 @@ void SPIT_Client::processSocketTask(SPIT_Client &instance) {
int intIndex = 0;
int intOldPos = 0;
string stringPart;
string stringParts[10];
string strParts[10];
while (intIndex < SAD_DetectedServer::PARAMINDEX_IP) {
int intPos = stringMessage.find(SERVERAUTODETECT_SEPERATOR.data(), intOldPos);
@@ -1546,14 +1547,24 @@ void SPIT_Client::processSocketTask(SPIT_Client &instance) {
stringPart = stringMessage.substr(intOldPos, intPos - intOldPos);
intOldPos = intPos + SERVERAUTODETECT_SEPERATOR.length();
}
stringParts[intIndex] = stringPart;
strParts[intIndex] = stringPart;
intIndex++;
}
stringParts[SAD_DetectedServer::PARAMINDEX_IP] = stringServerIP;
SAD_DetectedServer::addDetectedServer(stringParts[SAD_DetectedServer::PARAMINDEX_ID], stringParts);
auto server = make_unique<SAD_DetectedServer> (
strParts[SAD_DetectedServer::PARAMINDEX_NAME],
strParts[SAD_DetectedServer::PARAMINDEX_ID],
strParts[SAD_DetectedServer::PARAMINDEX_COMPUTERNAME],
stringServerIP,
strParts[SAD_DetectedServer::PARAMINDEX_PORT],
strParts[SAD_DetectedServer::PARAMINDEX_CLIENTIP],
strParts[SAD_DetectedServer::PARAMINDEX_ADDITIONS],
strParts[SAD_DetectedServer::PARAMINDEX_SERVERPROJECTNAME]);
SAD_DetectedServer::addDetectedServer(move(server));
}
fos::Task::delayMs(100);
SAD_DetectedServer::cycleEnd(instance);
SAD_DetectedServer::evaluateDetectedServers(instance);
instance.abortSearch = false;
// if(instance.m_ConnectionStatus == CONNECTION_OK) break;