src/client.c

changeset 5
f7dfef88947d
child 6
daaf6e5b3501
equal deleted inserted replaced
4:560e07f7a6a1 5:f7dfef88947d
1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2014 Mike Becker. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30 #include "terminal-chess.h"
31 #include "input.h"
32 #include <ncurses.h>
33
34 int client_run(Settings *settings) {
35 Server server;
36 int exit_code = EXIT_SUCCESS;
37
38 if (net_find(&server, settings->serverhost, settings->port)) {
39 fprintf(stderr, "Can't find server\n");
40 exit_code = EXIT_FAILURE;
41 goto quit;
42 }
43
44 if (net_connect(&server)) {
45 perror("Can't connect to server");
46 exit_code = EXIT_FAILURE;
47 goto quit;
48 }
49
50 /* net version handshake */
51 int fd = server.fd;
52 if (net_recieve_code(fd) != NETCODE_VERSION) {
53 fprintf(stderr, "Server uses an incompatible software version.\n");
54 exit_code = EXIT_FAILURE;
55 goto quit;
56 } else {
57 net_send_code(fd, NETCODE_VERSION);
58 }
59
60 printw("Connection established!\n\n");
61 refresh();
62
63 if (net_recieve_code(fd) == NETCODE_GAMEINFO) {
64 net_recieve_data(fd, &(settings->gameinfo),
65 sizeof(settings->gameinfo));
66 dump_gameinfo(&(settings->gameinfo));
67 printw("Accept challenge (y/n)? ");
68 if (prompt_yesno()) {
69 net_send_code(fd, NETCODE_ACCEPT);
70 // TODO: start game
71 } else {
72 net_send_code(fd, NETCODE_DECLINE);
73 }
74 } else {
75 fprintf(stderr, "Server sent invalid gameinfo.\n");
76 exit_code = EXIT_FAILURE;
77 goto quit;
78 }
79
80 quit:
81 net_destroy(&server);
82 return exit_code;
83 }

mercurial