aboutsummaryrefslogtreecommitdiffstats
path: root/FICS/ficsmain.c
diff options
context:
space:
mode:
Diffstat (limited to 'FICS/ficsmain.c')
-rw-r--r--FICS/ficsmain.c183
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(&current_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;
+}