refactoring Sever detection
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user