74 lines
2.5 KiB
C++
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 client_addr;
|
|
int client_addr_size = sizeof(client_addr);
|
|
SOCKET client_socket = accept(listen_socket, (struct sockaddr*)&client_addr, &client_addr_size);
|
|
if (client_socket == INVALID_SOCKET) {
|
|
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
|
|
continue;
|
|
}
|
|
std::cout << "Client connected!\n";
|
|
|
|
// 7. получение данных от юзера
|
|
char buffer[BUFFER_SIZE] = {0};
|
|
int bytes_received = recv(client_socket, buffer, BUFFER_SIZE, 0);
|
|
if (bytes_received > 0) {
|
|
std::string request(buffer, bytes_received);
|
|
std::cout << "Received request:\n" << request << "\n";
|
|
|
|
// Обработка запроса
|
|
std::string response = RouteHandler::get_response_by_request(request);
|
|
std::cout << "Response:\n" << response << "\n\n";
|
|
|
|
// Отправка ответа
|
|
send(client_socket, response.c_str(), response.size(), 0);
|
|
}
|
|
closesocket(client_socket);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#else
|
|
|
|
|
|
int SocketHandler::working_with_client_unix(int listen_socket) {
|
|
while (1) {
|
|
// Принятие соединения
|
|
sockaddr_in client_addr;
|
|
socklen_t client_addr_size = sizeof(client_addr);
|
|
int client_socket = accept(listen_socket, (struct sockaddr*)&client_addr, &client_addr_size);
|
|
if (client_socket == -1) {
|
|
perror("Accept failed");
|
|
continue;
|
|
}
|
|
std::cout << "Client connected.\n";
|
|
|
|
// Чтение данных
|
|
char buffer[BUFFER_SIZE] = {0};
|
|
ssize_t bytes_received = read(client_socket, buffer, BUFFER_SIZE);
|
|
if (bytes_received > 0) {
|
|
std::string request(buffer, bytes_received);
|
|
std::cout << "Received request:\n" << request << "\n";
|
|
|
|
std::string response = RouteHandler::get_response_by_request(request);
|
|
std::cout << "Response:\n" << response << "\n\n";
|
|
|
|
// Отправка ответа
|
|
send(client_socket, response.c_str(), response.size(), 0);
|
|
}
|
|
close(client_socket);
|
|
}
|
|
}
|
|
|
|
#endif
|