From 5c8666d4fb6d974c6d5b1d8331311e98bcd3ca1a Mon Sep 17 00:00:00 2001 From: mdiluzio Date: Sun, 4 Jan 2015 11:08:35 +0000 Subject: [PATCH] More refactoring by pulling code out of client and server files --- source/client/client.cpp | 24 ++++---------- source/client/net.cpp | 71 ++++++++++++++++++++++++++++++++++++++-- source/client/net.h | 8 ++++- source/client/server.cpp | 44 +++---------------------- 4 files changed, 86 insertions(+), 61 deletions(-) diff --git a/source/client/client.cpp b/source/client/client.cpp index 1184678..8619898 100644 --- a/source/client/client.cpp +++ b/source/client/client.cpp @@ -19,7 +19,7 @@ int runClient(int argc, char* argv[]) { - player_t myPlayer; + player_t myPlayer = player_t::NUM_INVALID; // My player int sockfd; // socket File descriptor int portno; // Port number @@ -29,7 +29,7 @@ int runClient(int argc, char* argv[]) struct hostent *server; // pointer to host information - char buffer[1028]; // buffer for socked read + char buffer[1028]; // buffer for socket read memset(buffer,0,sizeof(buffer)); // must provide information @@ -77,27 +77,17 @@ int runClient(int argc, char* argv[]) std::cout<<"Waiting for handshake"<= 0 ) { diff --git a/source/client/net.cpp b/source/client/net.cpp index 2de2e77..ed171f6 100644 --- a/source/client/net.cpp +++ b/source/client/net.cpp @@ -8,7 +8,7 @@ #include #include -int WaitForOrdersFromClient(const ClientInfo info, std::mutex &mut, CTTRTSGame &game) +void WaitForOrdersFromClient(const ClientInfo info, std::mutex &mut, CTTRTSGame &game) { char buffer[1028]; // buffer for orders @@ -35,8 +35,6 @@ int WaitForOrdersFromClient(const ClientInfo info, std::mutex &mut, CTTRTSGame & mut.lock(); game.IssueOrders(info.player , orders); mut.unlock(); - - return 0; } void GetOrdersFromClients(std::vector &myClients, CTTRTSGame &game, std::mutex &gameMutex) @@ -69,3 +67,70 @@ void SendGameInfoToClients(std::vector &myClients, const CTTRTSGame fatal_perror("ERROR sending to client"); } } + + +void PerformClientHandshake(int sockfd, unsigned int &player, std::string &gameNameString) +{ + char handshakeBuffer[128]; + memset(handshakeBuffer,0,sizeof(handshakeBuffer)); + + if (read(sockfd, handshakeBuffer,sizeof(handshakeBuffer)-1) < 0) + fatal_perror("ERROR recieving handshake from server"); + + std::string handshake(handshakeBuffer); + std::cout<<"Handshake:"< 10) + fatal_error("Binding failed"); + + // Attempt to bind our listening socket + if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) >= 0) + break; + + std::cout<<"Binding failed on try "< &myClients, CTTRTSGame &game, std::mutex &gameMutex); void SendGameInfoToClients(std::vector &myClients, const CTTRTSGame &game, std::mutex &gameMutex); +void TryBindSocket(int sockfd, sockaddr_in &serv_addr); + +void PerformServerHandshakeWithClient(const ClientInfo &client, const CTTRTSGame &game); + +void PerformClientHandshake(int sockfd, unsigned int &player, std::string &gameNameString); + inline void fatal_error(const char *msg) { std::cerr< 10) - { - fatal_error("Binding failed after retries"); - } - - if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) >= 0) - break; - - std::cout<<"Binding failed on try "< players = game.GetPlayers(); unsigned int numClients = players.size(); auto player_iterator = players.begin(); @@ -108,28 +94,7 @@ CTTRTSGame &RunServerForGame(CTTRTSGame &game) for( auto client : myClients ) { // Handshake currently just player - char handshake[64]; - snprintf(handshake, sizeof(handshake), TTRTS_HANDSHAKE_FORMAT,(unsigned int)client.player,game.GetName().c_str()); - - // Output the handshake - std::cout<<"Handshaking:"<