diff -r 560e07f7a6a1 -r f7dfef88947d src/main.c --- a/src/main.c Mon Mar 17 14:35:53 2014 +0100 +++ b/src/main.c Mon Mar 17 15:39:36 2014 +0100 @@ -31,7 +31,6 @@ #include #include #include -#include "input.h" int get_settings(int argc, char **argv, Settings *settings) { char *valid; @@ -126,17 +125,6 @@ refresh(); } -int cleanup(Settings *settings, int exitcode) { - - if (settings->server) { - if (net_destroy(settings->server)) { - perror("Server shutdown failed"); - } - } - - return exitcode; -} - static WINDOW* window; void leavescr() { @@ -179,88 +167,6 @@ cbreak(); atexit(leavescr); - Server server; - settings.server = &server; - - if (is_server(&settings)) { - dump_gameinfo(&(settings.gameinfo)); - printw("\nListening for client...\n"); - refresh(); - if (net_create(&server, settings.port)) { - perror("Server creation failed"); - return cleanup(&settings, EXIT_FAILURE); - } - - if (net_listen(&server)) { - perror("Listening for client failed"); - return cleanup(&settings, EXIT_FAILURE); - } - - /* net version handshake */ - int fd = server.client->fd; - net_send_code(fd, NETCODE_VERSION); - if (net_recieve_code(fd) != NETCODE_VERSION) { - fprintf(stderr, "Client uses an incompatible software version.\n"); - return cleanup(&settings, EXIT_FAILURE); - } - - printw("Client connected - transmitting gameinfo..."); - refresh(); - - - net_send_code(fd, NETCODE_GAMEINFO); - net_send_data(fd, &(settings.gameinfo), sizeof(settings.gameinfo)); - printw("\rClient connected - awaiting challenge acceptance..."); - refresh(); - int code = net_recieve_code(fd); - if (code == NETCODE_ACCEPT) { - printw("\rClient connected - challenge accepted."); - clrtoeol(); - } else if (code == NETCODE_DECLINE) { - printw("\rClient connected - challenge declined."); - clrtoeol(); - } else { - fprintf(stderr, "Invalid client response\n"); - return cleanup(&settings, EXIT_FAILURE); - } - } else { - if (net_find(&server, settings.serverhost, settings.port)) { - fprintf(stderr, "Can't find server\n"); - return cleanup(&settings, EXIT_FAILURE); - } - - if (net_connect(&server)) { - perror("Can't connect to server"); - return cleanup(&settings, EXIT_FAILURE); - } - - int fd = server.fd; - if (net_recieve_code(fd) != NETCODE_VERSION) { - fprintf(stderr, "Server uses an incompatible software version.\n"); - return cleanup(&settings, EXIT_FAILURE); - } else { - net_send_code(fd, NETCODE_VERSION); - } - - printw("Connection established!\n\n"); - refresh(); - - if (net_recieve_code(fd) == NETCODE_GAMEINFO) { - net_recieve_data(fd, &(settings.gameinfo), - sizeof(settings.gameinfo)); - dump_gameinfo(&(settings.gameinfo)); - printw("Accept challenge (y/n)? "); - if (prompt_yesno()) { - net_send_code(fd, NETCODE_ACCEPT); - // TODO: start game - } else { - net_send_code(fd, NETCODE_DECLINE); - } - } else { - fprintf(stderr, "Server sent invalid gameinfo.\n"); - } - } - - return cleanup(&settings, EXIT_SUCCESS); + return is_server(&settings) ? server_run(&settings) : client_run(&settings); }