1.1 --- a/src/main.c Mon Mar 17 14:35:53 2014 +0100 1.2 +++ b/src/main.c Mon Mar 17 15:39:36 2014 +0100 1.3 @@ -31,7 +31,6 @@ 1.4 #include <string.h> 1.5 #include <time.h> 1.6 #include <ncurses.h> 1.7 -#include "input.h" 1.8 1.9 int get_settings(int argc, char **argv, Settings *settings) { 1.10 char *valid; 1.11 @@ -126,17 +125,6 @@ 1.12 refresh(); 1.13 } 1.14 1.15 -int cleanup(Settings *settings, int exitcode) { 1.16 - 1.17 - if (settings->server) { 1.18 - if (net_destroy(settings->server)) { 1.19 - perror("Server shutdown failed"); 1.20 - } 1.21 - } 1.22 - 1.23 - return exitcode; 1.24 -} 1.25 - 1.26 static WINDOW* window; 1.27 1.28 void leavescr() { 1.29 @@ -179,88 +167,6 @@ 1.30 cbreak(); 1.31 atexit(leavescr); 1.32 1.33 - Server server; 1.34 - settings.server = &server; 1.35 - 1.36 - if (is_server(&settings)) { 1.37 - dump_gameinfo(&(settings.gameinfo)); 1.38 - printw("\nListening for client...\n"); 1.39 - refresh(); 1.40 - if (net_create(&server, settings.port)) { 1.41 - perror("Server creation failed"); 1.42 - return cleanup(&settings, EXIT_FAILURE); 1.43 - } 1.44 - 1.45 - if (net_listen(&server)) { 1.46 - perror("Listening for client failed"); 1.47 - return cleanup(&settings, EXIT_FAILURE); 1.48 - } 1.49 - 1.50 - /* net version handshake */ 1.51 - int fd = server.client->fd; 1.52 - net_send_code(fd, NETCODE_VERSION); 1.53 - if (net_recieve_code(fd) != NETCODE_VERSION) { 1.54 - fprintf(stderr, "Client uses an incompatible software version.\n"); 1.55 - return cleanup(&settings, EXIT_FAILURE); 1.56 - } 1.57 - 1.58 - printw("Client connected - transmitting gameinfo..."); 1.59 - refresh(); 1.60 - 1.61 - 1.62 - net_send_code(fd, NETCODE_GAMEINFO); 1.63 - net_send_data(fd, &(settings.gameinfo), sizeof(settings.gameinfo)); 1.64 - printw("\rClient connected - awaiting challenge acceptance..."); 1.65 - refresh(); 1.66 - int code = net_recieve_code(fd); 1.67 - if (code == NETCODE_ACCEPT) { 1.68 - printw("\rClient connected - challenge accepted."); 1.69 - clrtoeol(); 1.70 - } else if (code == NETCODE_DECLINE) { 1.71 - printw("\rClient connected - challenge declined."); 1.72 - clrtoeol(); 1.73 - } else { 1.74 - fprintf(stderr, "Invalid client response\n"); 1.75 - return cleanup(&settings, EXIT_FAILURE); 1.76 - } 1.77 - } else { 1.78 - if (net_find(&server, settings.serverhost, settings.port)) { 1.79 - fprintf(stderr, "Can't find server\n"); 1.80 - return cleanup(&settings, EXIT_FAILURE); 1.81 - } 1.82 - 1.83 - if (net_connect(&server)) { 1.84 - perror("Can't connect to server"); 1.85 - return cleanup(&settings, EXIT_FAILURE); 1.86 - } 1.87 - 1.88 - int fd = server.fd; 1.89 - if (net_recieve_code(fd) != NETCODE_VERSION) { 1.90 - fprintf(stderr, "Server uses an incompatible software version.\n"); 1.91 - return cleanup(&settings, EXIT_FAILURE); 1.92 - } else { 1.93 - net_send_code(fd, NETCODE_VERSION); 1.94 - } 1.95 - 1.96 - printw("Connection established!\n\n"); 1.97 - refresh(); 1.98 - 1.99 - if (net_recieve_code(fd) == NETCODE_GAMEINFO) { 1.100 - net_recieve_data(fd, &(settings.gameinfo), 1.101 - sizeof(settings.gameinfo)); 1.102 - dump_gameinfo(&(settings.gameinfo)); 1.103 - printw("Accept challenge (y/n)? "); 1.104 - if (prompt_yesno()) { 1.105 - net_send_code(fd, NETCODE_ACCEPT); 1.106 - // TODO: start game 1.107 - } else { 1.108 - net_send_code(fd, NETCODE_DECLINE); 1.109 - } 1.110 - } else { 1.111 - fprintf(stderr, "Server sent invalid gameinfo.\n"); 1.112 - } 1.113 - } 1.114 - 1.115 - return cleanup(&settings, EXIT_SUCCESS); 1.116 + return is_server(&settings) ? server_run(&settings) : client_run(&settings); 1.117 } 1.118