src/client.c

changeset 51
84f2e380a434
parent 34
c4d4b8a8f902
child 55
54ea19938d57
     1.1 --- a/src/client.c	Mon Jun 16 13:45:31 2014 +0200
     1.2 +++ b/src/client.c	Mon Jun 16 15:41:06 2014 +0200
     1.3 @@ -73,9 +73,10 @@
     1.4          return EXIT_FAILURE;
     1.5      }
     1.6  
     1.7 -    if (net_recieve_code(server.fd) == NETCODE_GAMEINFO) {
     1.8 -        net_recieve_data(server.fd, &(settings->gameinfo),
     1.9 -            sizeof(settings->gameinfo));
    1.10 +    uint8_t code = net_recieve_code(server.fd);
    1.11 +    if (code == NETCODE_GAMEINFO) {
    1.12 +        // Start new game
    1.13 +        net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo));
    1.14          dump_gameinfo(&(settings->gameinfo));
    1.15          if (prompt_yesno("Accept challenge")) {
    1.16              net_send_code(server.fd, NETCODE_ACCEPT);
    1.17 @@ -83,6 +84,28 @@
    1.18          } else {
    1.19              net_send_code(server.fd, NETCODE_DECLINE);
    1.20          }
    1.21 +    } else if (code == NETCODE_PGNDATA) {
    1.22 +        net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo));
    1.23 +        dump_gameinfo(&(settings->gameinfo));
    1.24 +        uint16_t mc;
    1.25 +        net_recieve_data(server.fd, &mc, sizeof(mc));
    1.26 +        Move *moves = calloc(mc, sizeof(Move));
    1.27 +        net_recieve_data(server.fd, moves, mc*sizeof(Move));
    1.28 +        GameState continuegame;
    1.29 +        gamestate_init(&continuegame);
    1.30 +        for (size_t i = 0 ; i < mc ; i++) {
    1.31 +            apply_move(&continuegame, &(moves[i]));
    1.32 +        }
    1.33 +        free(moves);
    1.34 +        addch('\n');
    1.35 +        dump_moveinfo(&continuegame);
    1.36 +        if (prompt_yesno(
    1.37 +                "\n\nServer wants to continue a game. Accept challenge")) {
    1.38 +            net_send_code(server.fd, NETCODE_ACCEPT);
    1.39 +            game_continue(settings, server.fd, &continuegame);
    1.40 +        } else {
    1.41 +            net_send_code(server.fd, NETCODE_DECLINE);
    1.42 +        }
    1.43      } else {
    1.44          addstr("Server sent invalid gameinfo.");
    1.45          net_destroy(&server);

mercurial