src/client.c

changeset 83
ead00609e5e6
parent 78
ceb9197b3c6d
equal deleted inserted replaced
82:e75865d90111 83:ead00609e5e6
74 net_destroy(&server); 74 net_destroy(&server);
75 return 1; 75 return 1;
76 } 76 }
77 77
78 uint8_t code = net_recieve_code(server.fd); 78 uint8_t code = net_recieve_code(server.fd);
79 GameState gamestate;
80 gamestate_init(&gamestate);
81 bool played = false;
79 if (code == NETCODE_GAMEINFO) { 82 if (code == NETCODE_GAMEINFO) {
80 /* Start new game */ 83 /* Start new game */
81 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); 84 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo));
82 dump_gameinfo(&(settings->gameinfo)); 85 dump_gameinfo(&(settings->gameinfo));
83 if (prompt_yesno("Accept challenge")) { 86 if (prompt_yesno("Accept challenge")) {
84 net_send_code(server.fd, NETCODE_ACCEPT); 87 net_send_code(server.fd, NETCODE_ACCEPT);
85 game_start(settings, server.fd); 88 game_play(settings, &gamestate, server.fd);
89 played = true;
86 } else { 90 } else {
87 net_send_code(server.fd, NETCODE_DECLINE); 91 net_send_code(server.fd, NETCODE_DECLINE);
88 } 92 }
89 } else if (code == NETCODE_PGNDATA) { 93 } else if (code == NETCODE_PGNDATA) {
90 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); 94 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo));
91 dump_gameinfo(&(settings->gameinfo)); 95 dump_gameinfo(&(settings->gameinfo));
92 uint16_t mc; 96 uint16_t mc;
93 net_recieve_data(server.fd, &mc, sizeof(mc)); 97 net_recieve_data(server.fd, &mc, sizeof(mc));
94 Move *moves = calloc(mc, sizeof(Move)); 98 Move *moves = calloc(mc, sizeof(Move));
95 net_recieve_data(server.fd, moves, mc*sizeof(Move)); 99 net_recieve_data(server.fd, moves, mc*sizeof(Move));
96 GameState continuegame;
97 gamestate_init(&continuegame);
98 for (size_t i = 0 ; i < mc ; i++) { 100 for (size_t i = 0 ; i < mc ; i++) {
99 apply_move(&continuegame, &(moves[i])); 101 apply_move(&gamestate, &(moves[i]));
100 } 102 }
101 free(moves); 103 free(moves);
102 addch('\n'); 104 addch('\n');
103 dump_moveinfo(&continuegame); 105 dump_moveinfo(&gamestate);
104 if (prompt_yesno( 106 if (prompt_yesno(
105 "\n\nServer wants to continue a game. Accept challenge")) { 107 "\n\nServer wants to continue a game. Accept challenge")) {
106 net_send_code(server.fd, NETCODE_ACCEPT); 108 net_send_code(server.fd, NETCODE_ACCEPT);
107 game_continue(settings, server.fd, &continuegame); 109 game_play(settings, &gamestate, server.fd);
110 played = true;
108 } else { 111 } else {
109 net_send_code(server.fd, NETCODE_DECLINE); 112 net_send_code(server.fd, NETCODE_DECLINE);
110 } 113 }
111 } else { 114 } else {
112 addstr("Server sent invalid gameinfo."); 115 addstr("Server sent invalid gameinfo.");
113 net_destroy(&server); 116 net_destroy(&server);
114 return 1; 117 return 1;
115 } 118 }
116 119
120 if (played) {
121 game_review(settings, &gamestate);
122 }
123
117 net_destroy(&server); 124 net_destroy(&server);
118 return 0; 125 return 0;
119 } 126 }

mercurial