X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=judge%2Fmanager%2Fnetwork_controller.cpp;h=9d14676309feb47ca6b6ae90586ea3b06119cbc0;hp=6d565547abbd03b8f8237a58ec3024bffb4bfcee;hb=73d5a5dab8881b9ed5f93a675d64f86a9b45e6bc;hpb=4d45373e18e4d5dc84adb373cdc9000f83dfe38a diff --git a/judge/manager/network_controller.cpp b/judge/manager/network_controller.cpp index 6d56554..9d14676 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