]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/tcpclient.cpp
updated the Change log w/ new additions
[irc/gameservirc.git] / gameserv / tcpclient.cpp
index c2abb79868b09a2e319f2af16d27c920de87f01a..48e7823371ba1ec40f001774ab3b11b775d6c9b2 100644 (file)
@@ -33,7 +33,7 @@
 using namespace std;
 
 char *PACKAGE = "GameServ";
-char *VERSION = "1.3.2 +devel";
+char *VERSION = "1.3.3 +devel";
 
 int sock;
 long lastrefresh;
@@ -47,6 +47,9 @@ void load_lastrollover();
 void save_lastrollover();
 void prettyIntro();
 void check_idles();
+void clearClients();
+void clearPlayers();
+void clearItems();
 
 // Make this a daemon
 int daemon(int nochdir, int noclose);
@@ -78,6 +81,7 @@ int main(int argc, char *argv[])
                  cout << "Usage: gameserv [options] [configfile]" << endl;
                  cout << "Options:" << endl;
                  cout << "--help                        Displays this help dialogue" << endl;
+                 delete []conf;
                  return 1;
                }
          delete []conf;
@@ -181,11 +185,12 @@ int main(int argc, char *argv[])
          ignore_pipe();
          sock = conn(remoteserver, remoteport, localhost, 0);
          //    sock = make_connection(remoteport, SOCK_STREAM, remoteserver);
-         if (sock == -1) {
-               fprintf(stderr,"make_connection failed.\n");
-               unload_config_file();
-               return -1;
-         }
+         if (sock == -1)
+               {
+                 fprintf(stderr,"make_connection failed.\n");
+                 unload_config_file();
+                 return -1;
+               }
          log("%S socket connected.");
          
 #ifdef UNREAL
@@ -274,7 +279,9 @@ int main(int argc, char *argv[])
                          cmd = strtok(NULL, " ");
                        }
                  else
-                       cmd = strtok(buf, " ");
+                       {
+                         cmd = strtok(buf, " ");
+                       }
 #else
                  source = strtok(buf, " ");
                  cmd = strtok(NULL, " ");
@@ -305,7 +312,7 @@ int main(int argc, char *argv[])
 
                  // Refresh players and clear news if the time is up
                  currentTime = time(NULL);
-
+                 
                  if (isRolloverForestFights())
                        {
                          if (currentTime - lastrollover >= rolloverperiod)
@@ -345,46 +352,57 @@ int main(int argc, char *argv[])
                  
                  
 #if !defined(P10)
-       if (stricmp(cmd, "PING") == 0) {
-           char *timestamp;
-           timestamp = strtok(NULL, "");
-           raw("PONG %s", timestamp);
-      #else
-       if (stricmp(cmd, "G") == 0) {
-           char *timestamp;
-           timestamp = strtok(NULL, " ");
-           raw("[] Z [] %s 0 %s", timestamp + 1, timestamp);
-      #endif
-       #ifdef P10
-       } else if (stricmp(cmd, "EB") == 0) {
-           raw("[] EA");
-       #endif
-       } else if (stricmp(cmd, "VERSION") == 0) {
-           char *server;
-           server = strtok(NULL, " ");
-           server++;
-           raw(":%s 351 %s %s_%s. %s", servername, source+1, PACKAGE, VERSION, servername);
-      #if !defined(P10)
-       } else if (strncmp(cmd, "NICK", 4) == 0) {
-         if (buffer[0] == ':')
-           {
-                 aClient *tempPtr;
-                 if ((tempPtr = find((source + 1))))
+                 if (stricmp(cmd, "PING") == 0)
                        {
-                         char *nick;
-                         unsigned long oldhv, newhv;
-                         nick = strtok(NULL, " ");
-                         oldhv = iHASH((unsigned char *) tempPtr->getNick());
-                         newhv = iHASH((unsigned char *) nick);
-                         tempPtr->setNick(nick);
-                         clients[oldhv].remove(tempPtr);
-                         clients[newhv].push_back(tempPtr);
+                         char *timestamp;
+                         timestamp = strtok(NULL, "");
+                         raw("PONG %s", timestamp);
                        }
-           }
-         else
-           {
-                 char *nick;
-      #else
+#else
+                 // P10 Ping
+                 if (stricmp(cmd, "G") == 0)
+                       {
+                         char *timestamp;
+                         timestamp = strtok(NULL, " ");
+                         raw("[] Z [] %s 0 %s", timestamp + 1, timestamp);
+                       }
+#endif
+#ifdef P10
+                 else if (stricmp(cmd, "EB") == 0)
+                       {
+                         raw("[] EA");
+                       }
+#endif
+                 else if (stricmp(cmd, "VERSION") == 0)
+                       {
+                         char *server;
+                         server = strtok(NULL, " ");
+                         server++;
+                         raw(":%s 351 %s %s_%s. %s", servername, source+1, PACKAGE, VERSION, servername);
+                       }
+                 // Code indenting is clean up until here!
+#if !defined(P10)
+                 else if (strncmp(cmd, "NICK", 4) == 0)
+                       {
+                         if (buffer[0] == ':')
+                               {
+                                 aClient *tempPtr;
+                                 if ((tempPtr = find((source + 1))))
+                                       {
+                                         char *nick;
+                                         unsigned long oldhv, newhv;
+                                         nick = strtok(NULL, " ");
+                                         oldhv = iHASH((unsigned char *) tempPtr->getNick());
+                                         newhv = iHASH((unsigned char *) nick);
+                                         tempPtr->setNick(nick);
+                                         clients[oldhv].remove(tempPtr);
+                                         clients[newhv].push_back(tempPtr);
+                                       }
+                               }
+                         else
+                               {
+                                 char *nick;
+#else
        } else if (stricmp(cmd, "N") == 0 && strlen(source) == 2) {
            {   
                char *nick, *realnick;
@@ -395,10 +413,9 @@ int main(int argc, char *argv[])
 
                if (nick[0] == '+')
                {
-                   #ifdef DEBUGMODE
+#ifdef DEBUGMODE
                    log ("aClient has modes");
-                   #endif
-
+#endif
                    // Searching for the +r mode (extra parameter)
                    for (unsigned int count = 1; count < strlen(nick); count++)
                    {
@@ -410,16 +427,16 @@ int main(int argc, char *argv[])
                    }
                    nick = strtok(NULL, " ");
                }
-      #endif
+#endif
                aClient *newuser;
 
                nick = strtok(NULL, " ");
 
-               #ifdef P10
+#ifdef P10
                    newuser = new aClient(nick, realnick);
-               #else
+#else
                    newuser = new aClient(nick);
-               #endif
+#endif
 
 
                        if (loaded)
@@ -472,10 +489,10 @@ int main(int argc, char *argv[])
 #endif
                clients[hv].push_back(newuser);
            }
-      #if defined(P10)
+#if defined(P10)
        } else if (stricmp(cmd, "Q") == 0) {
 //         unsigned long hv = sHASH((unsigned char *) source);
-      #else
+#else
        } else if (stricmp(cmd, "QUIT") == 0)
          {
 
@@ -494,51 +511,53 @@ int main(int argc, char *argv[])
                        goto end;
                  }
 
-               
-               notice(s_GameServ, "Kain", "Nick: %s", quitter->getNick());
                clients[hv].remove(quitter);
-               //              logout(quitter);
+               logout(quitter);
 
-               //              delete quitter;
+               delete quitter;
                
            if (z == ':')
                  source--;
 
-      #if defined(P10)
-       } else if (stricmp(cmd, "P") == 0) {
-           char *rest, *dest;
-           char *longname;
-           longname = new char[strlen(s_GameServ) + strlen(servername) + 2];
-
-           sprintf(longname, "%S@%s", servername);
-
-           dest = strtok(NULL, " ");
-           rest = strtok(NULL, "");
-           if (stricmp(dest, gsnum) == 0 || stricmp(dest, longname) == 0)
-           {
-               delete [] longname;
-               gameserv(source, rest);
-           }
-           else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
-           {
-               delete [] longname;
-               forest(source, rest);
-           }
-      #else
-       } else if (stricmp(cmd, "PRIVMSG") == 0) {
+#if defined(P10)
+         }
+       else if (stricmp(cmd, "P") == 0)
+         {
+               char *rest, *dest;
+               char *longname;
+               longname = new char[strlen(s_GameServ) + strlen(servername) + 2];
+               
+               sprintf(longname, "%S@%s", servername);
+               
+               dest = strtok(NULL, " ");
+               rest = strtok(NULL, "");
+               if (stricmp(dest, gsnum) == 0 || stricmp(dest, longname) == 0)
+                 {
+                       delete [] longname;
+                       gameserv(source, rest);
+                 }
+               else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
+                 {
+                       delete [] longname;
+                       forest(source, rest);
+                 }
+#else
+         }
+       else if (stricmp(cmd, "PRIVMSG") == 0)
+         {
            char *rest, *dest;
            dest = strtok(NULL, " ");
            rest = strtok(NULL, "");
            if (strnicmp(dest, s_GameServ, strlen(s_GameServ)) == 0)
-               gameserv(source, rest);
+                 gameserv(source, rest);
            else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
-               forest(source, rest);
-      #endif
-      #if defined(P10)
+                 forest(source, rest);
+#endif
+#if defined(P10)
        } else if (stricmp(cmd, "J") == 0) {
-      #else
+#else
        } else if (stricmp(cmd, "JOIN") == 0) {
-      #endif
+#endif
            char *channel;
            aClient *joiner;
            channel = strtok(NULL, " ");
@@ -552,23 +571,23 @@ int main(int argc, char *argv[])
 
            if (stricmp(channel, c_Forest) == 0 && is_playing(joiner))
            {
-               #ifdef DEBUGMODE
-                   log("Player %s (IRC: %s) joined %s", 
-                       joiner->stats->getName().c_str(), 
-                       #ifdef P10
-                           joiner->getRealNick(),
-                       #else
-                           joiner->getNick(),
-                       #endif
-                       c_Forest);
-               #endif
-               raw(":%S MODE %s +v %s", c_Forest, (source));
+#ifdef DEBUGMODE
+                 log("Player %s (IRC: %s) joined %s", 
+                         joiner->stats->getName().c_str(), 
+#ifdef P10
+                         joiner->getRealNick(),
+#else
+                         joiner->getNick(),
+#endif
+                         c_Forest);
+#endif
+                 raw(":%S MODE %s +v %s", c_Forest, (source));
            }
 
            if (z == ':')
                source--;
 
-       #if defined(BAHAMUT)
+#if defined(BAHAMUT)
        } else if (stricmp(cmd, "SJOIN") == 0) {
            char *channel, *nick, *tmp, *rest;
            strtok(NULL, " "); // Ignore the TS
@@ -594,9 +613,9 @@ int main(int argc, char *argv[])
            }
 #endif
        } else {
-           #ifdef DEBUGMODE
+#ifdef DEBUGMODE
                log("Unrecognized Message: cmd = %s   source = %s", cmd, source);
-           #endif
+#endif
        }
   }
 
@@ -607,12 +626,14 @@ int main(int argc, char *argv[])
   save_gs_dbase();
   save_dragon();
   saveNews(newsdata, todaysnews);
-
+  clearClients();
+  clearPlayers();
+  clearItems();
   delete_monsters();
 
-  #ifdef DEBUGMODE
+#ifdef DEBUGMODE
       log("<CLOSED>");
-  #endif
+#endif
 
   close(sock);
   unload_config_file();
@@ -753,7 +774,7 @@ aClient *findbynick(const char *nick)
   for (iter = clients[hv].begin(); iter != clients[hv].end(); iter++)
     {
          client = (*iter);
-       #ifdef P10
+#ifdef P10
          if (strcmp(client->getNick(), nick) == 0)
 #else
            if (stricmp(client->getNick(), nick) == 0)
@@ -846,15 +867,15 @@ void load_lastrefresh()
     infile.open(".gsrefresh");
     if (infile.fail())
     {
-       #ifdef DEBUGMODE
+#ifdef DEBUGMODE
            log("Error opening .gsrefresh");
-       #endif
+#endif
 
        generate:
        long mytime = time(NULL);
-       #ifdef DEBUGMODE
+#ifdef DEBUGMODE
            log("Generating new refresh time");
-       #endif
+#endif
 
        // Just a safety measure... tho no one should
        // get anywhere near the actual time as their refreshperiod
@@ -932,3 +953,37 @@ void save_lastrollover()
     outfile << lastrollover << endl;
     outfile.close();
 }
+void clearItems()
+{
+  list<item*>::iterator iter;
+  for (iter = Items.begin(); iter != Items.end(); iter++)
+       {
+         delete (*iter);
+         Items.erase(iter);
+       }
+}
+void clearClients()
+{
+  list<aClient*>::iterator iter;
+  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+       {
+         for (iter = clients[x].begin(); iter != clients[x].end(); iter++)
+               {
+                 delete (*iter);
+                 clients[x].erase(iter);
+               }
+       }
+}
+
+void clearPlayers()
+{
+  list<Player*>::iterator iter;
+  for (unsigned long x = 0; x < U_TABLE_SIZE; x++)
+       {
+         for (iter = players[x].begin(); iter != players[x].end(); iter++)
+               {
+                 delete (*iter);
+                 players[x].erase(iter);
+               }
+       }
+}