aed27b7a1593d1272586326b4c3e25703d6de0c4
[progcomp2012.git] / judge / manager / network_controller.cpp
1 #include "network_controller.h"
2
3 NetworkController::NetworkController(const Piece::Colour & newColour, const char * newName) : Controller(newColour, newName), sfd(-1)
4 {
5         struct protoent * tcp = getprotobyname("tcp");
6  
7         sfd = socket(PF_INET, SOCK_STREAM, tcp->p_proto);
8         if (sfd == -1)
9         {
10                 fprintf(stderr, "NetworkController::NetworkController - couldn't create a TCP socket!");
11                 return;
12         }
13 }
14
15 NetworkController::~NetworkController()
16 {
17         if (Valid())
18         {
19                 if (shutdown(sfd, SHUT_RDWR) == -1)
20                 {
21                         fprintf(stderr, "NetworkController::~NetworkController - Can't shutdown socket %d!", sfd);
22                         close(sfd);
23                         sfd = -1;
24                 }
25         }
26         close(sfd);
27 }
28
29 Server::Server(const Piece::Colour & newColour, const char * newName) : NetworkController(newColour, newName)
30 {
31         struct sockaddr_in ipa;
32         ipa.sin_family = AF_INET;
33         ipa.sin_port = htons(NetworkController::port);  
34         ipa.sin_addr.s_addr = INADDR_ANY;
35         memset(&ipa,0, sizeof ipa);
36
37         if (bind(sfd, (struct sockaddr*)&sfd, sizeof sfd) == -1)
38         {
39                 fprintf(stderr, "Server::Server - Couldn't bind to socket! Abort\n");
40                 close(sfd);
41                 sfd = -1;
42                 return;
43         }
44
45         //Listen for at most 1 connection
46         if (listen(sfd, 1) == -1)
47         {
48                 fprintf(stderr, "Server::Server - listening failed.\n");
49                 close(sfd);
50                 sfd = -1;
51                 return;
52         }       
53
54         //Accept the connection
55         sfd = accept(sfd, NULL, NULL);
56         if (sfd < 0)
57         {
58                 fprintf(stderr, "Server::Server - couldn't accept connection.\n");
59                 close(sfd);
60                 sfd = -1;
61                 return;
62         }
63
64         //We are now ready to play!
65 }
66
67
68 Client::Client(const Piece::Colour & newColour, const char * newName, const char * server) : NetworkController(newColour, newName)
69 {
70         struct sockaddr_in ipa;
71         ipa.sin_family = AF_INET;
72         ipa.sin_port = htons(NetworkController::port);  
73         int Res = inet_pton(AF_INET, server, &ipa.sin_addr);
74
75         if (Res < 0)
76         {
77                 fprintf(stderr, "Client::Client - First parameter is not a valid address family!\n");
78                 close(sfd);
79                 sfd = -1;
80                 return;
81         }
82         else if (Res == 0)
83         {
84                 fprintf(stderr, "Client::Client - Second parameter does not contain a valid IP Address!\n");
85                 close(sfd);
86                 sfd = -1;
87                 return;
88         }
89         
90         if (connect(sfd, (struct sockaddr*)&sfd, sizeof sfd) == -1)
91         {
92                 fprintf(stderr, "Client::Client - Connection to server at \"%s\" failed.\n", server);
93                 close(sfd);
94                 sfd = -1;
95                 return;
96         }
97
98         //We are now ready to play!
99 }
100 //EOF
101
102

UCC git Repository :: git.ucc.asn.au