diff -r 41017d0a72c5 -r 84f2e380a434 src/client.c --- a/src/client.c Mon Jun 16 13:45:31 2014 +0200 +++ b/src/client.c Mon Jun 16 15:41:06 2014 +0200 @@ -73,9 +73,10 @@ return EXIT_FAILURE; } - if (net_recieve_code(server.fd) == NETCODE_GAMEINFO) { - net_recieve_data(server.fd, &(settings->gameinfo), - sizeof(settings->gameinfo)); + uint8_t code = net_recieve_code(server.fd); + if (code == NETCODE_GAMEINFO) { + // Start new game + net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); dump_gameinfo(&(settings->gameinfo)); if (prompt_yesno("Accept challenge")) { net_send_code(server.fd, NETCODE_ACCEPT); @@ -83,6 +84,28 @@ } else { net_send_code(server.fd, NETCODE_DECLINE); } + } else if (code == NETCODE_PGNDATA) { + net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); + dump_gameinfo(&(settings->gameinfo)); + uint16_t mc; + net_recieve_data(server.fd, &mc, sizeof(mc)); + Move *moves = calloc(mc, sizeof(Move)); + net_recieve_data(server.fd, moves, mc*sizeof(Move)); + GameState continuegame; + gamestate_init(&continuegame); + for (size_t i = 0 ; i < mc ; i++) { + apply_move(&continuegame, &(moves[i])); + } + free(moves); + addch('\n'); + dump_moveinfo(&continuegame); + if (prompt_yesno( + "\n\nServer wants to continue a game. Accept challenge")) { + net_send_code(server.fd, NETCODE_ACCEPT); + game_continue(settings, server.fd, &continuegame); + } else { + net_send_code(server.fd, NETCODE_DECLINE); + } } else { addstr("Server sent invalid gameinfo."); net_destroy(&server);