hello-world-cpp/task_5/socket_handler.cpp
2025-01-13 23:44:26 +00:00

74 lines
2.5 KiB
C++

#include "socket_handler.h"
#include "routes.h"
const int BUFFER_SIZE = 4096;
#ifdef _WIN32
int SocketHandler::working_with_client_windows(SOCKET listen_socket) {
while (1) {
// 6. Принятие входящего соединения
sockaddr_in clientAddr;
int clientAddrSize = sizeof(clientAddr);
SOCKET clientSocket = accept(listen_socket, (struct sockaddr*)&clientAddr, &clientAddrSize);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
continue;
}
std::cout << "Client connected!\n";
// 7. получение данных от юзера
char buffer[BUFFER_SIZE] = {0};
int bytesReceived = recv(clientSocket, buffer, BUFFER_SIZE, 0);
if (bytesReceived > 0) {
std::string request(buffer, bytesReceived);
std::cout << "Received request:\n" << request << "\n";
// Обработка запроса
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
send(clientSocket, response.c_str(), response.size(), 0);
}
closesocket(clientSocket);
}
return 0;
}
#else
int SocketHandler::working_with_client_unix(int listen_socket) {
while (1) {
// Принятие соединения
sockaddr_in clientAddr;
socklen_t clientAddrSize = sizeof(clientAddr);
int clientSocket = accept(listen_socket, (struct sockaddr*)&clientAddr, &clientAddrSize);
if (clientSocket == -1) {
perror("Accept failed");
continue;
}
std::cout << "Client connected.\n";
// Чтение данных
char buffer[BUFFER_SIZE] = {0};
ssize_t bytesReceived = read(clientSocket, buffer, BUFFER_SIZE);
if (bytesReceived > 0) {
std::string request(buffer, bytesReceived);
std::cout << "Received request:\n" << request << "\n";
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
send(clientSocket, response.c_str(), response.size(), 0);
}
close(clientSocket);
}
}
#endif