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);