Sun, 29 Mar 2026 15:17:28 +0200
implement option to play via Unix domain socket
resolves #816
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
|
55
54ea19938d57
updated copyright and version info
Mike Becker <universe@uap-core.de>
parents:
51
diff
changeset
|
4 | * Copyright 2016 Mike Becker. All rights reserved. |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | * |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | */ |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | |
| 78 | 30 | #include "network.h" |
| 6 | 31 | #include "game.h" |
| 78 | 32 | #include "chess/game-info.h" |
| 33 | #include "chess/pgn.h" | |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | #include <ncurses.h> |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
35 | #include <errno.h> |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
36 | #include <string.h> |
| 78 | 37 | #include <stdlib.h> |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
38 | #include <unistd.h> |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
39 | #include <signal.h> |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
41 | static int server_fd = -1; |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
42 | static void interrupt_listen(int sig) { |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
43 | if (server_fd > -1) { |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
44 | // this interrupts |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
45 | close(server_fd); |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
46 | } |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
47 | } |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
48 | |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
49 | static int server_open(Server *server, Settings *settings) { |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | printw("\nListening for client...\n"); |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | refresh(); |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
52 | if (settings->usedomainsocket |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
53 | ? net_create_sock(server, settings->serverhost) |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
54 | : net_create_tcp(server, settings->port)) { |
|
34
c4d4b8a8f902
added nonblocking read for network games + minor build system fixes
Mike Becker <universe@uap-core.de>
parents:
30
diff
changeset
|
55 | addstr("Server creation failed"); |
| 6 | 56 | return 1; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | } |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
59 | // allow Ctrl+C to interrupt the listening process |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
60 | server_fd = server->fd; |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
61 | signal(SIGINT, interrupt_listen); |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
62 | |
| 6 | 63 | if (net_listen(server)) { |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
64 | addstr("Listening for client failed or interrupted"); |
| 6 | 65 | return 1; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | } |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
67 | |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
68 | // restore default action |
|
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
69 | signal(SIGINT, SIG_DFL); |
| 6 | 70 | |
| 71 | return 0; | |
| 72 | } | |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | |
| 6 | 74 | static int server_handshake(Client *client) { |
| 75 | net_send_code(client->fd, NETCODE_VERSION); | |
| 76 | if (net_recieve_code(client->fd) != NETCODE_VERSION) { | |
|
34
c4d4b8a8f902
added nonblocking read for network games + minor build system fixes
Mike Becker <universe@uap-core.de>
parents:
30
diff
changeset
|
77 | addstr("Client uses an incompatible software version."); |
| 6 | 78 | return 1; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
79 | } |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | |
|
46
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
81 | addstr("Client connected - transmitting gameinfo..."); |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | refresh(); |
| 6 | 83 | |
| 84 | return 0; | |
| 85 | } | |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
86 | |
| 6 | 87 | int server_run(Settings *settings) { |
| 88 | Server server; | |
| 89 | ||
| 90 | dump_gameinfo(&(settings->gameinfo)); | |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
91 | GameState gamestate; |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
92 | gamestate_init(&gamestate); |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
93 | if (settings->continuepgn) { |
|
64
4eda5df55f86
fixes castling not printed correctly to PGN
Mike Becker <universe@uap-core.de>
parents:
60
diff
changeset
|
94 | /* preload PGN data before handshake */ |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
95 | FILE *pgnfile = fopen(settings->continuepgn, "r"); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
96 | if (pgnfile) { |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
97 | int result = read_pgn(pgnfile, &gamestate, |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
98 | &(settings->gameinfo)); |
|
60
0c50aac49e55
adds error messages to PGN reader
Mike Becker <universe@uap-core.de>
parents:
59
diff
changeset
|
99 | long position = ftell(pgnfile); |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
100 | fclose(pgnfile); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
101 | if (result) { |
|
60
0c50aac49e55
adds error messages to PGN reader
Mike Becker <universe@uap-core.de>
parents:
59
diff
changeset
|
102 | printw("Invalid PGN file content at position %ld:\n%s\n", |
|
0c50aac49e55
adds error messages to PGN reader
Mike Becker <universe@uap-core.de>
parents:
59
diff
changeset
|
103 | position, pgn_error_str(result)); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
104 | return 1; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
105 | } |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
106 | if (!is_game_running(&gamestate)) { |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
107 | addstr("Game has ended. Use -S to analyze it.\n"); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
108 | return 1; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
109 | } |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
110 | addch('\n'); |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
111 | dump_moveinfo(&gamestate); |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
112 | addch('\n'); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
113 | } else { |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
114 | printw("Can't read PGN file (%s)\n", strerror(errno)); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
115 | return 1; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
116 | } |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
117 | } |
| 6 | 118 | |
|
94
864f59271974
implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
119 | if (server_open(&server, settings)) { |
| 6 | 120 | net_destroy(&server); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
121 | return 1; |
| 6 | 122 | } |
| 123 | ||
| 124 | if (server_handshake(server.client)) { | |
| 125 | net_destroy(&server); | |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
126 | return 1; |
| 6 | 127 | } |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
128 | |
| 6 | 129 | int fd = server.client->fd; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
130 | if (settings->continuepgn) { |
|
64
4eda5df55f86
fixes castling not printed correctly to PGN
Mike Becker <universe@uap-core.de>
parents:
60
diff
changeset
|
131 | /* Continue game, send PGN data */ |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
132 | uint16_t mc = 0; |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
133 | MoveList *movelist = gamestate.movelist; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
134 | while (movelist) { |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
135 | mc++; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
136 | movelist = movelist->next; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
137 | } |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
138 | |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
139 | Move* moves = calloc(mc, sizeof(Move)); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
140 | |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
141 | movelist = gamestate.movelist; |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
142 | mc = 0; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
143 | while (movelist) { |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
144 | moves[mc] = movelist->move; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
145 | mc++; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
146 | movelist = movelist->next; |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
147 | } |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
148 | |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
149 | size_t pgndata_size = sizeof(GameInfo)+sizeof(mc)+mc*sizeof(Move); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
150 | char *pgndata = malloc(pgndata_size); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
151 | memcpy(pgndata, &(settings->gameinfo), sizeof(GameInfo)); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
152 | memcpy(pgndata+sizeof(GameInfo), &mc, sizeof(mc)); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
153 | memcpy(pgndata+sizeof(GameInfo)+sizeof(mc), moves, mc*sizeof(Move)); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
154 | free(moves); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
155 | net_send_data(fd, NETCODE_PGNDATA, pgndata, pgndata_size); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
156 | free(pgndata); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
157 | } else { |
|
64
4eda5df55f86
fixes castling not printed correctly to PGN
Mike Becker <universe@uap-core.de>
parents:
60
diff
changeset
|
158 | /* Start new game */ |
|
51
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
159 | net_send_data(fd, NETCODE_GAMEINFO, |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
160 | &(settings->gameinfo), sizeof(GameInfo)); |
|
84f2e380a434
added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
161 | } |
|
46
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
162 | addstr("\rClient connected - awaiting challenge acceptance..."); |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | refresh(); |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | int code = net_recieve_code(fd); |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
165 | if (code == NETCODE_ACCEPT) { |
|
46
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
166 | addstr("\rClient connected - challenge accepted."); |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
167 | clrtoeol(); |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
168 | game_play(settings, &gamestate, fd); |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
169 | net_destroy(&server); |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
170 | game_review(settings, &gamestate); |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
171 | return 0; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | } else if (code == NETCODE_DECLINE) { |
|
46
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
173 | addstr("\rClient connected - challenge declined."); |
|
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
174 | clrtoeol(); |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
175 | net_destroy(&server); |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
176 | return 0; |
|
46
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
177 | } else if (code == NETCODE_CONNLOST) { |
|
4dcfb4c58b6d
netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
178 | addstr("\rClient connected - but gave no response."); |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | clrtoeol(); |
|
83
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
180 | net_destroy(&server); |
|
ead00609e5e6
fix that network connection is still open during game review
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
181 | return 0; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | } else { |
|
34
c4d4b8a8f902
added nonblocking read for network games + minor build system fixes
Mike Becker <universe@uap-core.de>
parents:
30
diff
changeset
|
183 | addstr("\rInvalid client response"); |
|
c4d4b8a8f902
added nonblocking read for network games + minor build system fixes
Mike Becker <universe@uap-core.de>
parents:
30
diff
changeset
|
184 | clrtoeol(); |
|
c4d4b8a8f902
added nonblocking read for network games + minor build system fixes
Mike Becker <universe@uap-core.de>
parents:
30
diff
changeset
|
185 | |
| 6 | 186 | net_destroy(&server); |
|
59
3fa1de896666
fixes inappropriate use of EXIT_ macros + adds a sample PGN file
Mike Becker <universe@uap-core.de>
parents:
55
diff
changeset
|
187 | return 1; |
|
5
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | } |
|
f7dfef88947d
separated server and client module
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | } |