Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Server.h"
- Server::Server()
- {
- if (serverSocket.bind(serverPort) == sf::Socket::Done) {
- std::cout << "Socket bind on ip " << serverIP << ".\n";
- std::cout << "Data will be received on port " << serverSocket.getLocalPort() << ".\n";
- }
- else std::cout << "Something went wrong, failed to connect.\n";
- }
- Server::~Server()
- {
- }
- void Server::SendPacket(int x)
- {
- x--;
- packet.PrepareToSend();
- if (serverSocket.send(packet.content, sizeof(packet.content), clients.at(x).ip, clients.at(x).port) != sf::Socket::Done) {
- std::cout << "Failed to send packet.\n";
- }
- else {
- std::cout << "Data sent to client " << clients.at(x).ip << " on port " << clients.at(x).port << ".\n";
- std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
- << " " << std::bitset<8>(packet.content[3]) << std::endl;
- }
- }
- void Server::SendAck()
- {
- packet.setAnswerField(answer::ack);
- packet.PrepareToSend();
- if (serverSocket.send(packet.content, sizeof(packet.content), lastSenderIP, lastSenderPort) != sf::Socket::Done) {
- std::cout << "Failed to send packet.\n";
- }
- else {
- std::cout << "Data sent to client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
- std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
- << " " << std::bitset<8>(packet.content[3]) << std::endl;
- }
- packet.setAnswerField(answer);
- }
- void Server::ReceivePacket()
- {
- size_t receivedSize;
- if (serverSocket.receive(packet.content, sizeof(packet.content), receivedSize, lastSenderIP, lastSenderPort) != sf::Socket::Done) {
- std::cout << "Something went wrong with receiving packet :(\n";
- }
- else {
- packet.PrepareAfterReceive();
- operation = packet.getOperationField();
- answer = packet.getAnswerField();
- if (answer == answer::ack) {
- std::cout << "Received ACK.\n";
- ReceivePacket();
- }
- else {
- std::cout << "Data received from client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
- std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
- << " " << std::bitset<8>(packet.content[3]) << std::endl;
- SendAck();
- }
- }
- if(clientsCounter > 0) {
- for (int i = 0; i < 2; i++) {
- if (clients.at(i).ip == lastSenderIP)
- clients.at(i).id = currentClient;
- }
- }
- }
- void Server::NewClient()
- {
- if (operation == operation::gettingID) {
- if (clientsCounter == 3) {
- packet.setOperationField(operation::tooManyPlayers);
- if (serverSocket.send(packet.content, sizeof(packet.content), lastSenderIP, lastSenderPort) != sf::Socket::Done) {
- std::cout << "Failed to send packet.\n";
- }
- else {
- std::cout << "Data (too many players) sent to client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
- std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
- << " " << std::bitset<8>(packet.content[3]) << std::endl;
- }
- }
- else {
- ClientTemplate _client;
- _client.ip = lastSenderIP;
- _client.port = lastSenderPort;
- _client.id = clientsCounter;
- clients.at(clientsCounter - 1) = _client;
- packet.setOperationField(operation::waitingForL);
- packet.setAnswerField(answer::idAssigned);
- packet.setSessionID(_client.id);
- SendPacket(_client.id);
- }
- }
- }
- void Server::Init()
- {
- do {
- ReceivePacket();
- clientsCounter++;
- if (operation == operation::gettingID) {
- NewClient();
- }
- else if (operation == operation::sendingNumber && answer == answer::sendingL) {
- gameRange.push_back(packet.getGuessField());
- packet.setOperationField(operation::waitingForL);
- packet.setAnswerField(answer::notYourTurn);
- SendPacket(packet.getSessionID());
- }
- else {
- packet.setOperationField(operation::waitingForL);
- packet.setAnswerField(answer::notYourTurn);
- SendPacket(packet.getSessionID());
- }
- } while (clientsCounter < 2);
- ReceivingRange();
- }
- void Server::ReceiveRange()
- {
- if (operation == operation::sendingNumber && answer == answer::sendingL) {
- for (int i = 0; i < 2; i++) {
- if (clients.at(i).id == currentClient) {
- if (clients.at(i).isLSent == false) {
- clients.at(i).isLSent = true;
- int x = int(packet.content[2]);
- gameRange.push_back(x);
- }
- else {
- packet.setOperationField(operation::waitingForL);
- packet.setAnswerField(answer::notYourTurn);
- SendPacket(currentClient - 1);
- }
- }
- }
- }
- if (gameRange.size() == 2) {
- isGameRange = true;
- std::sort(gameRange.begin(), gameRange.end());
- }
- }
- void Server::ReceivingRange() {
- do {
- ReceivePacket();
- NewClient();
- ReceiveRange();
- } while (isGameRange != true);
- SendRangeToPlayers();
- ManageGameplay();
- }
- void Server::SendRangeToPlayers()
- {
- packet.setOperationField(operation::gameBegin);
- packet.setAnswerField(answer::sendingL);
- packet.content[2] = gameRange.at(0);
- packet.content[3] = gameRange.at(1);
- SendPacket(1);
- SendPacket(2);
- }
- void Server::ManageGameplay()
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement