// This code is from: http://www.linuxhowtos.org/C_C++/socket.htm


// IMPORTANT
// If you are having trouble getting this to compile, try making
// the following changes:
// The file needs to have
// #include <iostream>
// at the beginning.  Also, on line #73, 
//   if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) needs to be:
//   if (connect(sockfd,(sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
// to cast serv_addr from a sockaddr_in* to a sockaddr* type.



// sample run with LightcycleServer.py:

// $ python LightcycleServer.py 52485
// Hosting the game on port 52485
// Waiting for players to connect
// Team DON1 has joined the game.
// Team DON2 has joined the game.
// ...

// $ ./a.out 127.0.0.1 52485
// Please enter the message: DON1
// 4 4 25 25
//
// Please enter the message: EAST
// 5 4 24 25
//
// Please enter the message: EAST
// WIN

// $ ./a.out 127.0.0.1 52485
// Please enter the message: DON2
// 25 25 4 4

// Please enter the message: WEST
// 24 25 5 4

// Please enter the message: EAST
// LOSE




#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 

void error(char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    while(1) {
        printf("Please enter the message: ");
        bzero(buffer,256);
        fgets(buffer,255,stdin);
        n = write(sockfd,buffer,strlen(buffer));
        if (n < 0) 
            error("ERROR writing to socket");
        bzero(buffer,256);
        n = read(sockfd,buffer,255);
        if (n < 0) 
            error("ERROR reading from socket");
        printf("%s\n",buffer);
    }
    return 0;
}
