71 if (client_handshake(&server)) { |
71 if (client_handshake(&server)) { |
72 net_destroy(&server); |
72 net_destroy(&server); |
73 return EXIT_FAILURE; |
73 return EXIT_FAILURE; |
74 } |
74 } |
75 |
75 |
76 if (net_recieve_code(server.fd) == NETCODE_GAMEINFO) { |
76 uint8_t code = net_recieve_code(server.fd); |
77 net_recieve_data(server.fd, &(settings->gameinfo), |
77 if (code == NETCODE_GAMEINFO) { |
78 sizeof(settings->gameinfo)); |
78 // Start new game |
|
79 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); |
79 dump_gameinfo(&(settings->gameinfo)); |
80 dump_gameinfo(&(settings->gameinfo)); |
80 if (prompt_yesno("Accept challenge")) { |
81 if (prompt_yesno("Accept challenge")) { |
81 net_send_code(server.fd, NETCODE_ACCEPT); |
82 net_send_code(server.fd, NETCODE_ACCEPT); |
82 game_start(settings, server.fd); |
83 game_start(settings, server.fd); |
|
84 } else { |
|
85 net_send_code(server.fd, NETCODE_DECLINE); |
|
86 } |
|
87 } else if (code == NETCODE_PGNDATA) { |
|
88 net_recieve_data(server.fd, &(settings->gameinfo), sizeof(GameInfo)); |
|
89 dump_gameinfo(&(settings->gameinfo)); |
|
90 uint16_t mc; |
|
91 net_recieve_data(server.fd, &mc, sizeof(mc)); |
|
92 Move *moves = calloc(mc, sizeof(Move)); |
|
93 net_recieve_data(server.fd, moves, mc*sizeof(Move)); |
|
94 GameState continuegame; |
|
95 gamestate_init(&continuegame); |
|
96 for (size_t i = 0 ; i < mc ; i++) { |
|
97 apply_move(&continuegame, &(moves[i])); |
|
98 } |
|
99 free(moves); |
|
100 addch('\n'); |
|
101 dump_moveinfo(&continuegame); |
|
102 if (prompt_yesno( |
|
103 "\n\nServer wants to continue a game. Accept challenge")) { |
|
104 net_send_code(server.fd, NETCODE_ACCEPT); |
|
105 game_continue(settings, server.fd, &continuegame); |
83 } else { |
106 } else { |
84 net_send_code(server.fd, NETCODE_DECLINE); |
107 net_send_code(server.fd, NETCODE_DECLINE); |
85 } |
108 } |
86 } else { |
109 } else { |
87 addstr("Server sent invalid gameinfo."); |
110 addstr("Server sent invalid gameinfo."); |