#include "client.hpp" void print_instructions() { std::cout << "Доступные команды:\n"; std::cout << " - вперёд\n"; std::cout << " - направо\n"; std::cout << " - налево\n"; std::cout << " - назад\n"; std::cout << " - сдаюсь\n"; std::cout << "Введите команду для хода.\n"; } int Client::ping(struct sockaddr_in address){ return connect(sock, (struct sockaddr*)&address, sizeof(address)) != 0; } Client::Client(){ // Создание сокета if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { throw std::runtime_error("[Client::request] connect(2) call error"); } } void Client::run(const std::string& h, const unsigned short p) { struct sockaddr_in serv_addr; serv_addr.sin_family = AF_INET; hostent* host_name; host_name = gethostbyname(h.c_str()); // Преобразование названия хоста в IP-адрес. if (host_name == nullptr) { throw std::runtime_error("Error in gethostbyname"); } serv_addr.sin_port = htons(p); memcpy(&serv_addr.sin_addr.s_addr, host_name->h_addr, host_name->h_length); // Подключение к серверу if (ping(serv_addr)) { throw std::runtime_error("Invalid hostname:port"); } std::cout << "Подключено к серверу. Введите ваше имя: "; std::string player_name; std::getline(std::cin, player_name); if (!ping(serv_addr)) { throw std::runtime_error("Connection lost!"); } // Отправка имени игрока на сервер send(sock, player_name.c_str(), player_name.size(), 0); } void Client::game(){ std::cout << "Игра началась!\n"; print_instructions(); char buffer[1024] = {0}; while (true) { std::cout << "Введите команду: "; std::string command; std::getline(std::cin, command); // Отправка команды на сервер send(sock, command.c_str(), command.size(), 0); // Получение ответа от сервера memset(buffer, 0, sizeof(buffer)); int bytes_received = recv(sock, buffer, sizeof(buffer), 0); if (bytes_received <= 0) { throw std::runtime_error("Connection lost!"); //break; } std::string response(buffer); std::cout << "Ответ сервера: " << response; // Проверка завершения игры if (response.find("вы выиграли") != std::string::npos || response.find("вы проиграли") != std::string::npos) { break; } } close(sock); }