Advertisement
Guest User

Untitled

a guest
Nov 16th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. #include "Server.h"
  2.  
  3. Server::Server()
  4. {
  5. if (serverSocket.bind(serverPort) == sf::Socket::Done) {
  6. std::cout << "Socket bind on ip " << serverIP << ".\n";
  7. std::cout << "Data will be received on port " << serverSocket.getLocalPort() << ".\n";
  8. }
  9. else std::cout << "Something went wrong, failed to connect.\n";
  10. }
  11.  
  12.  
  13. Server::~Server()
  14. {
  15. }
  16.  
  17. void Server::SendPacket(int x)
  18. {
  19. x--;
  20. packet.PrepareToSend();
  21. if (serverSocket.send(packet.content, sizeof(packet.content), clients.at(x).ip, clients.at(x).port) != sf::Socket::Done) {
  22. std::cout << "Failed to send packet.\n";
  23. }
  24. else {
  25. std::cout << "Data sent to client " << clients.at(x).ip << " on port " << clients.at(x).port << ".\n";
  26. std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
  27. << " " << std::bitset<8>(packet.content[3]) << std::endl;
  28. }
  29. }
  30.  
  31. void Server::SendAck()
  32. {
  33. packet.setAnswerField(answer::ack);
  34. packet.PrepareToSend();
  35. if (serverSocket.send(packet.content, sizeof(packet.content), lastSenderIP, lastSenderPort) != sf::Socket::Done) {
  36. std::cout << "Failed to send packet.\n";
  37. }
  38. else {
  39. std::cout << "Data sent to client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
  40. std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
  41. << " " << std::bitset<8>(packet.content[3]) << std::endl;
  42. }
  43. packet.setAnswerField(answer);
  44. }
  45.  
  46. void Server::ReceivePacket()
  47. {
  48. size_t receivedSize;
  49. if (serverSocket.receive(packet.content, sizeof(packet.content), receivedSize, lastSenderIP, lastSenderPort) != sf::Socket::Done) {
  50. std::cout << "Something went wrong with receiving packet :(\n";
  51. }
  52. else {
  53. packet.PrepareAfterReceive();
  54. operation = packet.getOperationField();
  55. answer = packet.getAnswerField();
  56. if (answer == answer::ack) {
  57. std::cout << "Received ACK.\n";
  58. ReceivePacket();
  59. }
  60. else {
  61. std::cout << "Data received from client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
  62. std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
  63. << " " << std::bitset<8>(packet.content[3]) << std::endl;
  64. SendAck();
  65. }
  66. }
  67. if(clientsCounter > 0) {
  68. for (int i = 0; i < 2; i++) {
  69. if (clients.at(i).ip == lastSenderIP)
  70. clients.at(i).id = currentClient;
  71. }
  72. }
  73.  
  74.  
  75. }
  76.  
  77. void Server::NewClient()
  78. {
  79. if (operation == operation::gettingID) {
  80. if (clientsCounter == 3) {
  81. packet.setOperationField(operation::tooManyPlayers);
  82. if (serverSocket.send(packet.content, sizeof(packet.content), lastSenderIP, lastSenderPort) != sf::Socket::Done) {
  83. std::cout << "Failed to send packet.\n";
  84. }
  85. else {
  86. std::cout << "Data (too many players) sent to client " << lastSenderIP << " on port " << lastSenderPort << ".\n";
  87. std::cout << "Data: " << std::bitset<8>(packet.content[0]) << " " << std::bitset<8>(packet.content[1]) << " " << std::bitset<8>(packet.content[2])
  88. << " " << std::bitset<8>(packet.content[3]) << std::endl;
  89. }
  90.  
  91. }
  92. else {
  93. ClientTemplate _client;
  94. _client.ip = lastSenderIP;
  95. _client.port = lastSenderPort;
  96. _client.id = clientsCounter;
  97. clients.at(clientsCounter - 1) = _client;
  98. packet.setOperationField(operation::waitingForL);
  99. packet.setAnswerField(answer::idAssigned);
  100. packet.setSessionID(_client.id);
  101. SendPacket(_client.id);
  102. }
  103. }
  104. }
  105.  
  106. void Server::Init()
  107. {
  108. do {
  109. ReceivePacket();
  110. clientsCounter++;
  111. if (operation == operation::gettingID) {
  112. NewClient();
  113. }
  114. else if (operation == operation::sendingNumber && answer == answer::sendingL) {
  115. gameRange.push_back(packet.getGuessField());
  116. packet.setOperationField(operation::waitingForL);
  117. packet.setAnswerField(answer::notYourTurn);
  118. SendPacket(packet.getSessionID());
  119. }
  120. else {
  121. packet.setOperationField(operation::waitingForL);
  122. packet.setAnswerField(answer::notYourTurn);
  123. SendPacket(packet.getSessionID());
  124. }
  125. } while (clientsCounter < 2);
  126.  
  127. ReceivingRange();
  128. }
  129.  
  130. void Server::ReceiveRange()
  131. {
  132. if (operation == operation::sendingNumber && answer == answer::sendingL) {
  133. for (int i = 0; i < 2; i++) {
  134. if (clients.at(i).id == currentClient) {
  135. if (clients.at(i).isLSent == false) {
  136. clients.at(i).isLSent = true;
  137. int x = int(packet.content[2]);
  138. gameRange.push_back(x);
  139. }
  140. else {
  141. packet.setOperationField(operation::waitingForL);
  142. packet.setAnswerField(answer::notYourTurn);
  143. SendPacket(currentClient - 1);
  144. }
  145. }
  146. }
  147. }
  148.  
  149. if (gameRange.size() == 2) {
  150. isGameRange = true;
  151. std::sort(gameRange.begin(), gameRange.end());
  152. }
  153. }
  154.  
  155. void Server::ReceivingRange() {
  156. do {
  157. ReceivePacket();
  158. NewClient();
  159. ReceiveRange();
  160. } while (isGameRange != true);
  161.  
  162. SendRangeToPlayers();
  163. ManageGameplay();
  164. }
  165.  
  166. void Server::SendRangeToPlayers()
  167. {
  168. packet.setOperationField(operation::gameBegin);
  169. packet.setAnswerField(answer::sendingL);
  170. packet.content[2] = gameRange.at(0);
  171. packet.content[3] = gameRange.at(1);
  172. SendPacket(1);
  173. SendPacket(2);
  174. }
  175.  
  176. void Server::ManageGameplay()
  177. {
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement