refactor: Tidy up SPIT 2

This commit is contained in:
2025-11-15 22:04:54 +01:00
parent 4a97988227
commit 118291f8ab
10 changed files with 165 additions and 462 deletions
+18 -105
View File
@@ -20,6 +20,7 @@ SClient::SClient(string name, string projName, ISocket &socket, Callbacks calls)
{
.delay = [&](int ms){ return fos::Task::delayMs(ms); },
.sendMessage = [&](Message::OPPart &msg){ return sendMessage(msg); },
.parseMessage = [&](Message& msg) { parseMessage(msg); }
}
),
mSocket(socket) {
@@ -226,14 +227,14 @@ void SClient::processSpitMessage(SClient &rM) {
while (true) {
auto data = *incommingSpit.dequeue();
auto spitMsg = make_unique<Message>(data);
rM.parseMessage(move(spitMsg));
rM.checkParseMessage(move(spitMsg));
}
}
void SClient::resetMessageNumberReceived() {
mMessageNumberReceived = -1;
mOvertakingMessages.clear();
mProcessor.resetMessageNumberReceived();
}
void SClient::checkParseMessage(unique_ptr<Message> p_SPITMessage) {
@@ -246,12 +247,12 @@ void SClient::checkParseMessage(unique_ptr<Message> p_SPITMessage) {
int msgNum = (int)(p_SPITMessage->getHeader()->getMessageNumber() & 0xFF);
if (msgNum == 0) {
parseMessage(std::move(p_SPITMessage));
parseMessage(*p_SPITMessage);
return;
}
if (mMessageNumberReceived < 0) {
mMessageNumberReceived = msgNum;
parseMessage(std::move(p_SPITMessage));
parseMessage(*p_SPITMessage);
return;
}
@@ -261,122 +262,39 @@ void SClient::checkParseMessage(unique_ptr<Message> p_SPITMessage) {
if (msgNum == intNextMessageNumber) {
mMessageNumberReceived = msgNum;
parseMessage(std::move(p_SPITMessage));
// check overtaking messages
auto it = mOvertakingMessages.begin();
while (mOvertakingMessages.size() > 0) {
intNextMessageNumber = mMessageNumberReceived + 1;
if (intNextMessageNumber > 255 || intNextMessageNumber < 1)
intNextMessageNumber = 1;
auto &ptrOvertakingSPIT_Message = *it;
msgNum = (int)(ptrOvertakingSPIT_Message->getHeader()->getMessageNumber() & 0xFF);
if (msgNum == intNextMessageNumber) {
mMessageNumberReceived = msgNum;
parseMessage(move(ptrOvertakingSPIT_Message));
mOvertakingMessages.erase(it);
it = mOvertakingMessages.begin();
} else {
break;
}
}
parseMessage(*p_SPITMessage);
mMessageNumberReceived = mProcessor.sendOvertakingMessage(mMessageNumberReceived);
} else {
// p_SPITMessage has overtaken another message
addOvertakingMessage(move(p_SPITMessage));
mProcessor.addOvertakingMessage(move(p_SPITMessage));
}
}
void SClient::addOvertakingMessage(unique_ptr<Message> message) {
if (!message) {
return;
}
if (mOvertakingMessages.size() > mProcessor.MAX_OVERTAKING_SPIT_MESSAGES) {
ESP_LOGD(TAG, "Client receiveing: perhaps message lost !!!!!");
}
int intMessageNumber = (int)(message->getHeader()->getMessageNumber() & 0xFF);
for (auto it = mOvertakingMessages.begin(); it != mOvertakingMessages.end(); ++it) {
const auto &overtaking = *it;
int intOvertakingMessageNumber = (int)(overtaking->getHeader()->getMessageNumber() & 0xFF);
if (intMessageNumber < intOvertakingMessageNumber) {
mOvertakingMessages.insert(it, move(message));
return;
}
}
mOvertakingMessages.push_back(move(message));
}
void SClient::parseMessage(unique_ptr<Message> message) {
void SClient::parseMessage(Message& message) {
answerWatchdog();
if (!message || !message->getHeader() || !message->getOPPart()) {
if (!message.getHeader() || !message.getOPPart()) {
ESP_LOGD(TAG, "Client::parseMessage incomplete message");
return;
}
switch (message->getType()) {
switch (message.getType()) {
//----- Connection -----
case Message::ConnectAnswer::OPFLAG:
parseConnectAnswer(message->getAs<Message::ConnectAnswer>());
parseConnectAnswer(message.getAs<Message::ConnectAnswer>());
break;
case Message::Disconnect::OPFLAG:
parseDisconnect(message->getAs<Message::Disconnect>());
break;
case Message::ReportProject::OPFLAG:
mProcessor.parseReportProject(message->getAs<Message::ReportProject>());
parseDisconnect(message.getAs<Message::Disconnect>());
break;
case Message::Watchdog::OPFLAG:
parseWatchdog(message->getAs<Message::Watchdog>());
parseWatchdog(message.getAs<Message::Watchdog>());
break;
case Message::WatchdogAnswer::OPFLAG:
parseWatchdogAnswer(message->getAs<Message::WatchdogAnswer>());
break;
//----- SPIT Project -----
case Message::StartProjectTransfer::OPFLAG:
mProcessor.parseStartProjectTransfer(message->getAs<Message::StartProjectTransfer>());
break;
case Message::CloseProject::OPFLAG:
mProcessor.parseCloseProject(message->getAs<Message::CloseProject>());
break;
case Message::RequestProjectTransfer::OPFLAG:
mProcessor.parseRequestProjectTransfer(message->getAs<Message::RequestProjectTransfer>());
break;
case Message::EndProjectTransfer::OPFLAG:
mProcessor.parseEndProjectTransfer(message->getAs<Message::EndProjectTransfer>());
break;
//----- SPIT Types ------
case Message::ReportType::OPFLAG:
mProcessor.parseReportType(message->getAs<Message::ReportType>());
break;
case Message::RemoveType::OPFLAG:
mProcessor. parseRemoveType(message->getAs<Message::RemoveType>());
//----- SPIT Objects ------
break;
case Message::ReportObject::OPFLAG:
mProcessor.parseReportObject(message->getAs<Message::ReportObject>());
break;
case Message::RemoveObject::OPFLAG:
mProcessor.parseRemoveObject(message->getAs<Message::RemoveObject>());
break;
//----- Play SPIT Objects ------
case Message::PlayStart::OPFLAG:
mProcessor.parsePlayStart(message->getAs<Message::PlayStart>());
break;
case Message::PlayObject::OPFLAG:
mProcessor.parsePlayObject(message->getAs<Message::PlayObject>());
break;
case Message::PlayEnd::OPFLAG:
mProcessor.parsePlayEnd(message->getAs<Message::PlayEnd>());
break;
case Message::ReportPlayStatus::OPFLAG:
mProcessor.parseReportPlayStatus(message->getAs<Message::ReportPlayStatus>());
parseWatchdogAnswer(message.getAs<Message::WatchdogAnswer>());
break;
default:
ESP_LOGD(TAG, "Client::parseMessage: Unknown Message");
// pass object to SubProcessor
mProcessor.parseMessage(message);
}
}
@@ -491,7 +409,6 @@ void SClient::parseConnectAnswer(Message::ConnectAnswer &message) {
if (message.getConnected() == false) {
disconnectInternal(Connection::NoneServer);
} else {
message.getStepTime();
mConnectionStatus = Connection::Ok;
mDisconnectedByServer = false;
ESP_LOGD(TAG, "connection established");
@@ -511,10 +428,7 @@ void SClient::parseConnectAnswer(Message::ConnectAnswer &message) {
*/
void SClient::parseDisconnect(Message::Disconnect &message) {
Connection intCauseDisconnect = Connection::NoneServer;
/*
function<void()> o_Callable = bind(&SClient::disconnectInternal, this, intCauseDisconnect);
SPIT_Handler::addCallable(o_Callable);
*/
mDisconnectedByServer = true;
SClient::disconnectInternal(intCauseDisconnect);
}
@@ -527,7 +441,6 @@ void SClient::parseDisconnect(Message::Disconnect &message) {
* @param message
*/
void SClient::parseWatchdog(Message::Watchdog &message) {
// ESP_LOGD(TAG, "parse Watchdog ");
Message::WatchdogAnswer o_WatchdogAnswer;
sendMessage(o_WatchdogAnswer);
}