Files
bar/include/helpers/socket.hpp

51 lines
1.5 KiB
C++

#pragma once
#include <cassert>
#include <iostream>
#include <string>
#include <sys/socket.h>
#include <vector>
#include "helpers/string.hpp"
class SocketHelper {
typedef struct SocketMessage {
std::string eventType;
std::string eventData;
} SocketMessage;
public:
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) {
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<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;
}
};