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 } |