src/client.c

Mon, 17 Mar 2014 15:39:36 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 17 Mar 2014 15:39:36 +0100
changeset 5
f7dfef88947d
child 6
daaf6e5b3501
permissions
-rw-r--r--

separated server and client module

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

mercurial