X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=judge%2Fmanager%2Fnetwork_controller.cpp;h=5a689a0d736ea9f1cb7256b5a99f44f12158590f;hp=9d14676309feb47ca6b6ae90586ea3b06119cbc0;hb=f37d392713a0b6fec7a2c543edcd8402156f3744;hpb=73d5a5dab8881b9ed5f93a675d64f86a9b45e6bc diff --git a/judge/manager/network_controller.cpp b/judge/manager/network_controller.cpp index 9d14676..5a689a0 100644 --- a/judge/manager/network_controller.cpp +++ b/judge/manager/network_controller.cpp @@ -1,102 +1,39 @@ #include "network_controller.h" -NetworkController::NetworkController(const Piece::Colour & newColour, const char * newName) : Controller(newColour, newName), sfd(-1) -{ - //struct protoent * tcp = getprotobyname("tcp"); - - sfd = socket(PF_INET, SOCK_STREAM, 0); - if (sfd < 0) - { - perror("NetworkController::NetworkController - Error creating TCP socket"); - return; - } -} - -NetworkController::~NetworkController() -{ - if (Valid()) - { - if (shutdown(sfd, SHUT_RDWR) == -1) - { - perror("NetworkController::~NetworkController - shutting down socket... "); - close(sfd); - sfd = -1; - } - } - close(sfd); -} +using namespace std; -void NetworkController::Message(const char * string) +MovementResult NetworkSender::QuerySetup(const char * opponentName, string setup[]) { + //fprintf(stderr," NetworkSender::QuerySetup... "); + MovementResult result = controller->QuerySetup(opponentName, setup); + for (int ii=0; ii < 4; ++ii) + assert(network->SendMessage("%s",setup[ii].c_str())); //TODO: Proper error check + + //fprintf(stderr,"Done!\n"); + return result; } -Server::Server(const Piece::Colour & newColour, const char * newName) : NetworkController(newColour, newName) +MovementResult NetworkReceiver::QuerySetup(const char * opponentName, string setup[]) { - struct sockaddr_in name; - char buf[1024]; - int cc; - - - 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," NetworkReceiver::QuerySetup... "); + for (int ii=0; ii < 4; ++ii) { - perror("Server::Server - Error binding socket"); - close(sfd); sfd = -1; return; - } - - if (listen(sfd,1) < 0) - { - 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) - { - perror("Server::Server - Error accepting connection"); - close(sfd); sfd = -1; return; - } - - - for(;;) - { - cc=recv(sfd,buf,sizeof(buf), 0) ; - if (cc == 0) exit (0); - buf[cc] = '\0'; - printf("message received: %s\n", buf); + assert(network->GetMessage(setup[ii], 20000)); } + //fprintf(stderr,"Done!\n"); + return MovementResult::OK; } - -Client::Client(const Piece::Colour & newColour, const char * newName, const char * address) : NetworkController(newColour, newName) +MovementResult NetworkSender::QueryMove(string & buffer) { - struct sockaddr_in server; - struct hostent *hp; - - - 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) - { - perror("Client::Client - Error connecting to server at address %s"); - close(sfd); sfd = -1; - return; - } - - for (;;) { - send(sfd, "HI", 2,0 ); - sleep(2); - } - + MovementResult result = controller->QueryMove(buffer); + network->SendMessage("%s", buffer.c_str()); + return result; } -//EOF - +MovementResult NetworkReceiver::QueryMove(string & buffer) +{ + assert(network->GetMessage(buffer, 20000)); + return MovementResult::OK; +}