]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/tcpclient.cpp
Implemented the refreshperiod config file setting
[irc/gameservirc.git] / gameserv / tcpclient.cpp
index dd56aafed62ba501f6e22f945c683325bc46ddea..0394335b24fd910d9af8df81f93ab64de05447a4 100644 (file)
@@ -38,12 +38,12 @@ char *PACKAGE = "GameServ";
 char *VERSION = "1.2.3 +devel";
 
 int sock;
-int day;
+long lastrefresh;
 
 List<aClient> clients[U_TABLE_SIZE];
 
-void save_day();
-void load_day();
+void save_lastrefresh();
+void load_lastrefresh();
 void prettyIntro();
 void check_idles();
 
@@ -97,7 +97,6 @@ int main(int argc, char *argv[])
        delete []conf;
 
     // Turn into a daemon
-
     if (daemon(1,0) < 0)
     {
         perror("Could not turn into a daemon");
@@ -106,6 +105,7 @@ int main(int argc, char *argv[])
 
   init_masters();
   load_gs_dbase();
+  loadNews(newsdata, todaysnews);
 
   if (load_monsters() == false)
        goto end;
@@ -138,7 +138,7 @@ int main(int argc, char *argv[])
  for (int retry = 0; retry < 3 && !shuttingdown; retry++)
  {
     connected = 1;
-    load_day();
+    load_lastrefresh();
 
 
     long int loadtime = time(NULL);
@@ -181,6 +181,14 @@ int main(int argc, char *argv[])
        raw("NICK %S 1 %d +w%s %s %s %s :GameServ", time(NULL), (isBOper() ? "o" : ""), 
                gsident, gshost, servername);
        raw(":%s SJOIN %ld %s +nt :@%S", servername, time(NULL), c_Forest);
+#elif defined(ULTIMATE2)
+       raw("PASS %s :TS", remotepass);
+       raw("SERVER %s 1 :%s", servername, servername);
+       raw("NICK %S 1 %d %s %s %s 0 :GameServ", 
+               time(NULL), gsident, gshost, servername);
+       if (isBOper())
+           raw(":%S mode %S +o");
+       raw(":%S JOIN %s", c_Forest);
 #elif defined(P10)
        // Server numeric is: []  <-- must be unique
        raw("PASS :%s", remotepass);
@@ -194,9 +202,14 @@ int main(int argc, char *argv[])
        raw("%s T %s :%s", gsnum, c_Forest, c_ForestTopic);
        raw("[] EB");  // End burst
 #else 
-#ifndef HYBRID
-       raw(":%S MODE %s +o %S", c_Forest);
-#endif
+    #ifndef HYBRID
+       #if defined(ULTIMATE2)
+           raw(":%s MODE %s +o %S %ld", servername, c_Forest, 
+               time(NULL));
+       #else
+           raw(":%S MODE %s +o %S", c_Forest);
+       #endif
+    #endif
        raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic);
 #endif
 
@@ -251,6 +264,15 @@ int main(int argc, char *argv[])
            }
        }
 
+       // Refresh players and clear news if the time is up
+       if (loadtime - lastrefresh >= refreshperiod)
+       {
+           refreshall();
+           clearNews(todaysnews);
+           saveNews(newsdata, todaysnews);
+           save_lastrefresh();
+       }
+
        // Save the player data every updateperiod seconds
        currentTime = time(NULL);
        if (currentTime - oldTime >= updateperiod)
@@ -258,6 +280,7 @@ int main(int argc, char *argv[])
            oldTime = currentTime;
            log("Saving to %s", playerdata);
            save_gs_dbase();
+           saveNews(newsdata, todaysnews);
        }
 
 
@@ -357,7 +380,7 @@ int main(int argc, char *argv[])
 
                temp = clients[hv].insertAtBack(newuser);
 
-               #if defined(HYBRID) || defined(BAHAMUT)
+               #if defined(HYBRID) || defined(BAHAMUT) || defined(ULTIMATE2)
                    char *nickserver;
                    strtok(NULL, " ");
                    strtok(NULL, " ");
@@ -365,7 +388,6 @@ int main(int argc, char *argv[])
                    if (nickserver[0] == '+')
                        strtok(NULL, " ");
                    strtok(NULL, " ");
-
                    nickserver = strtok(NULL, " ");
                    for (int x = 0; x < 32; x++)
                    {
@@ -545,7 +567,7 @@ int main(int argc, char *argv[])
   end:
 
   save_gs_dbase();
-  save_day();
+  saveNews(newsdata, todaysnews);
 
   delete_monsters();
   delete_masters();
@@ -714,56 +736,6 @@ aClient *findbynick(const char *nick)
     return client;    
 }
 
-void load_day()
-{
-    ifstream infile;
-
-    infile.open(".gsday");
-
-    if (infile.fail())
-    {
-       #ifdef DEBUGMODE
-           log("Error opening .gsday");
-       #endif
-
-       generate:
-        #ifdef DEBUGMODE
-           log("Generating new day");
-       #endif
-       struct tm *tm;
-       time_t ti;
-       time(&ti);
-       tm = localtime(&ti);
-
-       day = tm->tm_mday;
-
-        save_day();
-       return;
-    }
-
-    infile >> day;
-    infile.close();
-    if (day < 1 || day > 31)
-       goto generate;
-}
-
-void save_day()
-{
-    ofstream outfile;
-
-    outfile.open(".gsday");
-
-    if (outfile.fail())
-    {
-       log("Error creating new file .gsday");
-       return;
-    }
-
-    outfile << day << endl;
-
-    outfile.close();
-}
-
 /* daemon() - detach process from user and disappear into the background
  * returns -1 on failure, but you can't do much except exit in that case
  * since we may already have forked. This is based on the BSD version,
@@ -838,3 +810,44 @@ cout << "G     G  AA   AA MM    MM EEEEEEE  SSSSS  EEEEEEE RR   RR    VVV" << en
 cout << " GGGGG                                                        V\n\n" << endl;
 cout << "Version: " << VERSION << endl;
 }
+
+void load_lastrefresh()
+{
+    ifstream infile;
+    infile.open(".gsrefresh");
+    if (infile.fail())
+    {
+       #ifdef DEBUGMODE
+           log("Error opening .gsrefresh");
+       #endif
+
+       generate:
+       #ifdef DEBUGMODE
+           log("Generating new refresh time");
+       #endif
+       lastrefresh = time(NULL);
+       refreshall();
+       save_lastrefresh();
+       return;
+    }
+    infile >> lastrefresh;
+    infile.close();
+    if (lastrefresh < 0)
+       goto generate;
+}
+
+void save_lastrefresh()
+{
+    ofstream outfile;
+
+    outfile.open(".gsrefresh");
+
+    if (outfile.fail())
+    {
+       log("Error creating new file .gsrefresh");
+       return;
+    }
+    outfile << lastrefresh << endl;
+
+    outfile.close();
+}