]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/tcpclient.cpp
fixed a couple of bugs
[irc/gameservirc.git] / gameserv / tcpclient.cpp
index e32b564951579de641396b49618a742bcdf0143e..b07cef9ca5c59241a9599ecf1ff67e8a53371295 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,8 @@ void load_lastrollover();
 void save_lastrollover();
 void prettyIntro();
 void check_idles();
+void clearClients();
+void clearPlayers();
 
 // Make this a daemon
 int daemon(int nochdir, int noclose);
@@ -181,11 +183,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 +277,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 +310,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 +350,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 +411,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 +425,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 +487,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,8 +509,6 @@ int main(int argc, char *argv[])
                        goto end;
                  }
 
-               
-               notice(s_GameServ, "Kain", "Nick: %s", quitter->getNick());
                clients[hv].remove(quitter);
                //              logout(quitter);
 
@@ -504,33 +517,7 @@ int main(int argc, char *argv[])
            if (z == ':')
                  source--;
 
-           /* Attempting to use the logout() function
-           if ((quitter = find(source)))
-               clients[hv].remove(quitter);
-           if ((quitter = findIRCplayer(source)))
-           {
-               if (player_fight(quitter))
-               {
-                   // Stop the fight on the other client
-                   aClient *otherplayer = quitter->stats->battle;
-                   otherplayer->stats->battle = NULL;
-                   notice(s_GameServ, otherplayer->getNick(), "%s "\
-                          "has quit IRC. The fight stops here.",
-                          quitter->stats->name);
-               }
-               quitter->stats->battle = NULL;
-               quitter->stats->fight = NULL;
-               quitter->stats->master = NULL;
-
-               quitter->setNick("Not Playing");
-               #ifdef P10
-                   quitter->setRealNick("Not Playing");
-               #endif
-               quitter->stats->client = NULL; // Unidentify them
-           }
-           */
-
-      #if defined(P10)
+#if defined(P10)
        } else if (stricmp(cmd, "P") == 0) {
            char *rest, *dest;
            char *longname;
@@ -550,7 +537,7 @@ int main(int argc, char *argv[])
                delete [] longname;
                forest(source, rest);
            }
-      #else
+#else
        } else if (stricmp(cmd, "PRIVMSG") == 0) {
            char *rest, *dest;
            dest = strtok(NULL, " ");
@@ -559,12 +546,12 @@ int main(int argc, char *argv[])
                gameserv(source, rest);
            else if (stricmp(dest, c_Forest) == 0 && isListenOnCF())
                forest(source, rest);
-      #endif
-      #if defined(P10)
+#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, " ");
@@ -578,23 +565,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
@@ -620,9 +607,9 @@ int main(int argc, char *argv[])
            }
 #endif
        } else {
-           #ifdef DEBUGMODE
+#ifdef DEBUGMODE
                log("Unrecognized Message: cmd = %s   source = %s", cmd, source);
-           #endif
+#endif
        }
   }
 
@@ -633,12 +620,14 @@ int main(int argc, char *argv[])
   save_gs_dbase();
   save_dragon();
   saveNews(newsdata, todaysnews);
+  clearClients();
+  clearPlayers();
 
   delete_monsters();
 
-  #ifdef DEBUGMODE
+#ifdef DEBUGMODE
       log("<CLOSED>");
-  #endif
+#endif
 
   close(sock);
   unload_config_file();
@@ -713,45 +702,16 @@ aClient *findbynick(char *nick)
        return client;
 }
 
-aClient *findIRCplayer(const char *nick)
-{
-  list<aClient*>::iterator iter;
-  aClient *p = NULL;
-  
-  p = find(nick);
-  
-  if (!is_playing(p))
-       return NULL;
-  
-  unsigned long hv = iHASH((unsigned char *) p->stats->getName().c_str());
-  
-  for (iter = players[hv].begin(); iter != players[hv].end(); iter++)
-    {
-         p = (*iter);
-#ifdef P10
-         if (strcmp(p->getNick(), nick) == 0)
-               {
-#else
-      if (stricmp(p->getNick(), nick) == 0)
-               {       
-#endif
-                 return p;
-               }
-         p = NULL;
-       }
-  return NULL;
-}
-
-aClient *findplayer(const char *name)
+Player *findplayer(const char *name)
 {
-  list<aClient*>::iterator iter;
-  Player *p = NULL;
+  list<Player*>::iterator iter;
+  Player *p;
   unsigned long hv = iHASH((unsigned char *) name);
   for (iter = players[hv].begin(); iter != players[hv].end(); iter++)
     {
-         p = (*iter)->stats;
+         p = (*iter);
          if (stricmp(p->getName().c_str(), name) == 0)
-           return (*iter);
+           return p;
          p = NULL;
     }
   return NULL;
@@ -759,23 +719,21 @@ aClient *findplayer(const char *name)
 
 void check_idles()
 {
-  list<aClient*>::iterator iter;
+  list<Player*>::iterator iter;
+  Player *p;
   
-  Player *p = NULL;
-
   for (int x = 0; x < U_TABLE_SIZE; x++)
     {
          for (iter = players[x].begin(); iter != players[x].end(); iter++)
                {
-                 p = (*iter)->stats;
+                 p = (*iter);
 
                  switch(p->getLevel())
                        {
                        case 1:
                          if ((time(NULL) - p->lastlogin) / 86400 >= level1expire)
                                {
-                                 logout((*iter));
-                                 players[x].remove((*iter));
+                                 logout(p->getClient());
                                  return;
                                }
                          break;
@@ -783,8 +741,7 @@ void check_idles()
                        default:
                          if ((time(NULL) - p->lastlogin) / 86400 >= defaultexpire)
                                {
-                                 logout((*iter));
-                                 players[x].remove((*iter));
+                                 logout(p->getClient());
                                  return;
                                }
                          break;
@@ -811,7 +768,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)
@@ -904,15 +861,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
@@ -990,3 +947,28 @@ void save_lastrollover()
     outfile << lastrollover << endl;
     outfile.close();
 }
+
+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);
+               }
+       }
+}