diff --git a/judge/manager/main.cpp b/judge/manager/main.cpp index 83b3c6318052f1143fec71186f5002f5639b03da..08c381ce9492421599ed02e6b73ac6128fcb46e7 100644 --- a/judge/manager/main.cpp +++ b/judge/manager/main.cpp @@ -242,7 +242,10 @@ Piece::Colour SetupGame(int argc, char ** argv) } else if (red == NULL || blue == NULL) //Not enough players { - fprintf(stderr, "ARGUMENT_ERROR - Did not recieve enough players (did you mean to use the -f switch?)\n"); + if (client) + fprintf(stderr, "ARGUMENT_ERROR - When using the --client switch, supply an IP for the Red player.\n"); + else + fprintf(stderr, "ARGUMENT_ERROR - Did not recieve enough players (did you mean to use the -f switch?)\n"); exit(EXIT_FAILURE); } diff --git a/judge/manager/network_controller.cpp b/judge/manager/network_controller.cpp index 6d565547abbd03b8f8237a58ec3024bffb4bfcee..9d14676309feb47ca6b6ae90586ea3b06119cbc0 100644 --- a/judge/manager/network_controller.cpp +++ b/judge/manager/network_controller.cpp @@ -2,13 +2,12 @@ NetworkController::NetworkController(const Piece::Colour & newColour, const char * newName) : Controller(newColour, newName), sfd(-1) { - struct protoent * tcp = getprotobyname("tcp"); + //struct protoent * tcp = getprotobyname("tcp"); - sfd = socket(PF_INET, SOCK_STREAM, tcp->p_proto); + sfd = socket(PF_INET, SOCK_STREAM, 0); if (sfd < 0) { - // fprintf(stderr, "NetworkController::NetworkController - couldn't create a TCP socket!"); - perror("NetworkController::NetworkController - creating TCP socket... "); + perror("NetworkController::NetworkController - Error creating TCP socket"); return; } } @@ -19,7 +18,6 @@ NetworkController::~NetworkController() { if (shutdown(sfd, SHUT_RDWR) == -1) { - // fprintf(stderr, "NetworkController::~NetworkController - Can't shutdown socket %d!", sfd); perror("NetworkController::~NetworkController - shutting down socket... "); close(sfd); sfd = -1; @@ -28,77 +26,76 @@ NetworkController::~NetworkController() close(sfd); } +void NetworkController::Message(const char * string) +{ + +} + Server::Server(const Piece::Colour & newColour, const char * newName) : NetworkController(newColour, newName) { - struct sockaddr_in ipa; - ipa.sin_family = AF_INET; - ipa.sin_port = htons(NetworkController::port); - ipa.sin_addr.s_addr = INADDR_ANY; - memset(&ipa,0, sizeof ipa); + struct sockaddr_in name; + char buf[1024]; + int cc; - if (bind(sfd, (struct sockaddr*)&ipa, sizeof (ipa)) == -1) //dERP DERP DERP + + name.sin_family = AF_INET; + name.sin_addr.s_addr = htonl(INADDR_ANY); + name.sin_port = htons(NetworkController::port); + + if (bind( sfd, (struct sockaddr *) &name, sizeof(name) ) < 0) { - // fprintf(stderr, "Server::Server - Couldn't bind to socket! Abort\n"); - perror("Server::Server - binding to socket... "); - close(sfd); - sfd = -1; - return; + perror("Server::Server - Error binding socket"); + close(sfd); sfd = -1; return; } - //Listen for at most 1 connection - if (listen(sfd, 1) == -1) + if (listen(sfd,1) < 0) { - fprintf(stderr, "Server::Server - listening failed.\n"); - close(sfd); - sfd = -1; - return; - } - - //Accept the connection - sfd = accept(sfd, NULL, NULL); + perror("Server::Server - Error listening on socket"); + close(sfd); sfd = -1; return; + } + int psd = accept(sfd, 0, 0); + close(sfd); + sfd = psd; if (sfd < 0) { - fprintf(stderr, "Server::Server - couldn't accept connection.\n"); - close(sfd); - sfd = -1; - return; + perror("Server::Server - Error accepting connection"); + close(sfd); sfd = -1; return; } - //We are now ready to play! + + for(;;) + { + cc=recv(sfd,buf,sizeof(buf), 0) ; + if (cc == 0) exit (0); + buf[cc] = '\0'; + printf("message received: %s\n", buf); + } } -Client::Client(const Piece::Colour & newColour, const char * newName, const char * server) : NetworkController(newColour, newName) +Client::Client(const Piece::Colour & newColour, const char * newName, const char * address) : NetworkController(newColour, newName) { - struct sockaddr_in ipa; - ipa.sin_family = AF_INET; - ipa.sin_port = htons(NetworkController::port); - int Res = inet_pton(AF_INET, server, &ipa.sin_addr); + struct sockaddr_in server; + struct hostent *hp; - if (Res < 0) - { - fprintf(stderr, "Client::Client - First parameter is not a valid address family!\n"); - close(sfd); - sfd = -1; - return; - } - else if (Res == 0) - { - fprintf(stderr, "Client::Client - Second parameter does not contain a valid IP Address!\n"); - close(sfd); - sfd = -1; - return; - } - - if (connect(sfd, (struct sockaddr*)&sfd, sizeof sfd) == -1) + + server.sin_family = AF_INET; + hp = gethostbyname("127.0.0.1"); + bcopy ( hp->h_addr, &(server.sin_addr.s_addr), hp->h_length); + server.sin_port = htons(NetworkController::port); + + if (connect(sfd, (struct sockaddr *) &server, sizeof(server)) < 0) { - fprintf(stderr, "Client::Client - Connection to server at \"%s\" failed.\n", server); - close(sfd); - sfd = -1; + perror("Client::Client - Error connecting to server at address %s"); + close(sfd); sfd = -1; return; } - //We are now ready to play! + for (;;) { + send(sfd, "HI", 2,0 ); + sleep(2); + } + } //EOF diff --git a/judge/manager/network_controller.h b/judge/manager/network_controller.h index a64ad305bf7e41c7fddc21fb25d38553287bc8c7..7b9af300f35910f7d0dcf3a8e6c7ca23f68dd3e1 100644 --- a/judge/manager/network_controller.h +++ b/judge/manager/network_controller.h @@ -25,13 +25,13 @@ class NetworkController : public Controller virtual bool Valid() {return sfd != -1;} - virtual void Message(const char * string) {fprintf(stderr, "NetworkController unimplemented!\n"); assert(false);} + virtual void Message(const char * string); virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]) {fprintf(stderr, "NetworkController unimplemented!\n"); assert(false);} virtual MovementResult QueryMove(std::string & buffer) {fprintf(stderr, "NetworkController unimplemented!\n"); assert(false);} protected: int sfd; int cfd; - static const int port = 666; + static const int port = 4950; }; class Server : public NetworkController