Files
bar/include/helpers/socket.hpp

52 lines
1.5 KiB
C++

#pragma once
#include <cassert>
#include <spdlog/spdlog.h>
#include <string>
#include <sys/socket.h>
#include <vector>
#include "helpers/string.hpp"
class SocketHelper {
public:
typedef struct SocketMessage {
std::string eventType;
std::string eventData;
} SocketMessage;
static std::vector<SocketMessage> 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) {
spdlog::warn("Socket closed by peer");
} else {
spdlog::error("Error reading from socket");
}
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<SocketMessage>();
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;
}
};