quick commit
This commit is contained in:
52
include/helpers/socket.hpp
Normal file
52
include/helpers/socket.hpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sys/socket.h>
|
||||
#include <vector>
|
||||
|
||||
#include "helper/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, ">>");
|
||||
|
||||
message.eventType = messageCommandVector[0];
|
||||
message.eventData = messageCommandVector.size() > 1 ? messageCommandVector[1] : "";
|
||||
splitMessagesFinal.push_back(message);
|
||||
}
|
||||
|
||||
return splitMessagesFinal;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user