diff options
author | Markus Uhlin <markus@nifty-networks.net> | 2023-12-07 21:31:49 +0100 |
---|---|---|
committer | Markus Uhlin <markus@nifty-networks.net> | 2023-12-07 21:31:49 +0100 |
commit | 79b59f9b30fb6a1fdf8c3efb446271f7cb00d434 (patch) | |
tree | f6ade4ccbc3af20d825edacfd12b5da8ded8d240 /FICS/ficsmain.c |
FICS 1.6.2
Diffstat (limited to 'FICS/ficsmain.c')
-rw-r--r-- | FICS/ficsmain.c | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/FICS/ficsmain.c b/FICS/ficsmain.c new file mode 100644 index 0000000..b1882f3 --- /dev/null +++ b/FICS/ficsmain.c @@ -0,0 +1,183 @@ +/* ficsmain.c + * + */ + +/* + fics - An internet chess server. + Copyright (C) 1993 Richard V. Nash + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +*/ + +/* Revision history: + name email yy/mm/dd Change + Richard Nash 93/10/22 Created +*/ + +#include "stdinclude.h" + +#include "common.h" +#include "ficsmain.h" +#include "config.h" +#include "network.h" +#include "command.h" +#include "playerdb.h" +#include "ratings.h" +#include "utils.h" +/*#include "hostinfo.h" */ +#include "board.h" +#include "talkproc.h" +#include "comproc.h" +#include "shutdown.h" +#ifndef IGNORE_ECO +#include "eco.h" +#endif +#include <sys/param.h> + +/* Arguments */ +PUBLIC int port; +PUBLIC int withConsole; + +/* grimm */ +void player_array_init(void); +/* for warning */ + +PRIVATE void usage(char *progname) +{ + fprintf(stderr, "Usage: %s [-p port] [-C] [-h]\n", progname); + fprintf(stderr, "\t\t-p port\t\tSpecify port. (Default=5000)\n"); + fprintf(stderr, "\t\t-C\t\tStart with console player connected to stdin.\n"); + fprintf(stderr, "\t\t-h\t\tDisplay this information.\n"); + exit(1); +} + +PRIVATE void GetArgs(int argc, char *argv[]) +{ + int i; + + port = DEFAULT_PORT; + withConsole = 0; + + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + switch (argv[i][1]) { + case 'p': + if (i == argc - 1) + usage(argv[0]); + i++; + if (sscanf(argv[i], "%d", &port) != 1) + usage(argv[0]); + break; + case 'C': + fprintf(stderr, "-C Not implemented!\n"); + exit(1); + withConsole = 1; + break; + case 'h': + usage(argv[0]); + break; + } + } else { + usage(argv[0]); + } + } +} + +PRIVATE void main_event_loop(void) { +int current_socket; +char command_string[MAX_STRING_LENGTH]; + + while (1) { + ngc2(command_string, HEARTBEATTIME); + if (process_heartbeat(¤t_socket) == COM_LOGOUT) { + process_disconnection(current_socket); + net_close_connection(current_socket); + } + } +} + +void TerminateServer(int sig) +{ + fprintf(stderr, "FICS: Got signal %d\n", sig); + output_shut_mess(); + TerminateCleanup(); + net_close(); + exit(1); +} + +void BrokenPipe(int sig) +{ + fprintf(stderr, "FICS: Got Broken Pipe\n"); +} + +PUBLIC int main(int argc, char *argv[]) +{ + +#ifdef DEBUG +#ifdef HAVE_MALLOC_DEBUG + malloc_debug(16); +#endif +#endif + GetArgs(argc, argv); + signal(SIGTERM, TerminateServer); + signal(SIGINT, TerminateServer); + signal(SIGPIPE, BrokenPipe); + if (net_init(port)) { + fprintf(stderr, "FICS: Network initialize failed on port %d.\n", port); + exit(1); + } + startuptime = time(0); +/* Using the value defined in config.h now instead of the real hostname. + This is used as the return address in email, so it needs to be a real + DNS resolvable hostname! Sparky */ +/* gethostname(fics_hostname, 80); */ + strcpy ( fics_hostname, SERVER_HOSTNAME ); + quota_time = 60; + player_high = 0; + game_high = 0; + srand(startuptime); + fprintf(stderr, "FICS: Initialized on port %d at %s.\n", port, strltime(&startuptime)); +/* iamserver = 0; */ +/* if (hostinfo_init()) { + MailGameResult = 0; + fprintf(stderr, "FICS: No ratings server connection.\n"); + } else { + if (iamserver) { + fprintf(stderr, "FICS: I don't know how to be a ratings server, refusing.\n"); + MailGameResult = 0; + } else { + fprintf(stderr, "FICS: Ratings server set to: %s\n", hArray[0].email_address); + MailGameResult = 1; + } + } */ +/* if (mail_log_file) + fclose(mail_log_file); */ + fprintf(stderr, "FICS: commands_init()\n"); + commands_init(); +/* fprintf(stderr, "FICS: channel_init()\n"); + channel_init(); */ + fprintf(stderr, "FICS: rating_init()\n"); + rating_init(); + fprintf(stderr, "FICS: wild_init()\n"); + wild_init(); +#ifndef IGNORE_ECO + fprintf(stderr, "FICS: book init()\n"); + BookInit(); +#endif + fprintf(stderr, "FICS: player_array_init()\n"); + player_array_init(); + player_init(withConsole); + main_event_loop(); + fprintf(stderr, "FICS: Closing down.\n"); + output_shut_mess(); + net_close(); + return 0; +} |