From e2a5fd51eee22b8dd8eb7935b6a77d7f7541aef1 Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Wed, 21 Oct 2015 17:48:47 -0500 Subject: [PATCH] Create Server.cpp --- Server.cpp | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Server.cpp diff --git a/Server.cpp b/Server.cpp new file mode 100644 index 0000000..2545ba1 --- /dev/null +++ b/Server.cpp @@ -0,0 +1,141 @@ +/* A simple server in the internet domain using TCP + The port number is passed as an argument */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Board.h" +using namespace std; + +void error(const char *msg) +{ + perror(msg); + exit(1); +} + +int main(int argc, char *argv[]) +{ + int sockfd, newsockfd, portno; + socklen_t clilen; + + struct sockaddr_in serv_addr, cli_addr; + + int n; + + if (argc < 2) { + fprintf(stderr,"ERROR, no port provided\n"); + exit(1); + } + + sockfd = socket(AF_INET, SOCK_STREAM, 0); + + if (sockfd < 0) + error("ERROR opening socket"); + + bzero((char *) &serv_addr, sizeof(serv_addr)); + + portno = atoi(argv[1]); + + serv_addr.sin_family = AF_INET; + + serv_addr.sin_addr.s_addr = INADDR_ANY; + + serv_addr.sin_port = htons(portno); + + if (bind(sockfd, (struct sockaddr *) &serv_addr, + sizeof(serv_addr)) < 0) + error("ERROR on binding"); + + listen(sockfd,5); + + clilen = sizeof(cli_addr); + + newsockfd = accept(sockfd, + (struct sockaddr *) &cli_addr, + &clilen); + + if (newsockfd < 0) + error("ERROR on accept"); + + //After all the server setup crap is done, we start the board + + // cout<<"WELCOME\n"; + + // cout<<"1. Play against AI?\n"; + // cout<<"2. Play against a human?\n"; + // cout<<"Enter choice: \n"; + + + // cin >> choice; + // cout << "OK" << endl; + + Board b; + string move; + + + bool gameOver = false; + b.snapshot(); + char buffer[256]; + char info[256]; + int choice; + int move_counter = 0; + string final_move; + + //Waiting for client to select game type + n = read(newsockfd,info,255); + istringstream convert(info); + convert >> choice; //Sets choice equal to 1 or 2, based on clients input + bzero(info,256); //Resets info back to normal, "choice" now contains client's value + + while(true) { + + while(gameOver != true) + { + gameOver = b.isGameOver(); + + while(b.getTurn() == 'O' ) + { + b.displayBoard();//Display the board on the server + string boardState = b.boardToString(); + final_move = b.boardToString(); + write(newsockfd, boardState.c_str(), boardState.length());//Display the board to the client (line by line) + cout<<"\nWaiting for client: "; + n = read(newsockfd,buffer,255); + move = buffer; + b.interpret(move,b); + gameOver = b.isGameOver(); + if(gameOver == true) { + string endGame = "Game_Over"; + write(newsockfd, endGame.c_str(), endGame.length()); //Display the board to the client (line by line) + break; + } + else { + string continueGame = "Continue_Game"; + write(newsockfd, continueGame.c_str(), continueGame.length()); //Display the board to the client (line by line) + } + } + + vector possibleMoves = b.viewPossibleMoves(); + if(choice == 1) + b.easyAI(); + b.snapshot(); + } + + string final_move = b.boardToString(); + write(newsockfd, final_move.c_str(), final_move.length());//Display the board to the client (line by line) + write(newsockfd, final_move.c_str(), final_move.length()); + cout << "\n\nGAME OVER!!!"; + //b.displayRecord();for debugging undo/snapchot fnctions + usleep(1); + close(newsockfd); + close(sockfd); + break; + } + return 0; +}