#pragma once #include #include #include #include #include #include "helpers/string.hpp" class SocketHelper { typedef struct SocketMessage { std::string eventType; std::string eventData; } SocketMessage; public: static std::vector parseSocketMessage(int socketFd, const std::string &delimiter) { char buffer[4096]; std::string data; ssize_t bytesRead = recv(socketFd, buffer, sizeof(buffer) - 1, 0); if (bytesRead > 0) { buffer[bytesRead] = '\0'; data = std::string(buffer); } else if (bytesRead == 0) { std::cerr << "Socket closed by peer" << std::endl; } else { std::cerr << "Error reading from socket" << std::endl; } auto delimiterPos = data.find(delimiter); if (delimiterPos == std::string::npos) { assert(false && "Delimiter not found in socket message"); } auto splitMessages = StringHelper::split(data, '\n'); auto splitMessagesFinal = std::vector(); for (auto splitMessage : splitMessages) { SocketMessage message; auto messageCommandVector = StringHelper::split(splitMessage, delimiter); message.eventType = messageCommandVector[0]; message.eventData = messageCommandVector.size() > 1 ? messageCommandVector[1] : ""; splitMessagesFinal.push_back(message); } return splitMessagesFinal; } };