From 6331e00600e34ed84217945f84da99224abd54f3 Mon Sep 17 00:00:00 2001 From: Brandon Jackson <1drummer@att.net> Date: Mon, 19 Oct 2015 20:12:03 -0500 Subject: [PATCH] This allows clients to connect to, and hosts a game --- 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..3f57f01 --- /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 "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"; + + int choice; + cin >> choice; + cout << "OK" << endl; + + Board b; + string move; + + //Brute force up in here! + bool gameOver = false; + vector record; + b.snapshot(record,b); + char buffer[256]; + char info[256]; + + while(true) { + + while(gameOver != true) + { + gameOver = b.isGameOver(); + + while(b.getTurn() == 'O' ) + { + b.displayBoard(); //Display the board on the server + string boardState = 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(); + } + + close(newsockfd); + close(sockfd); + break; + + /* + bzero(buffer,512); + n = read(newsockfd,buffer,255); + if (n < 0) error("ERROR reading from socket"); + printf("Here is the message: %s\n",buffer); + n = write(newsockfd,"I got your message",18); + + if (n < 0) error("ERROR writing to socket"); + + if(buffer == "y") { + close(newsockfd); + close(sockfd); + break; + } + */ + } + return 0; +}