]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/tcpclient.cpp
Updated TODO and fixed the hashing algorithm for P10 numerics + others' nickname...
[irc/gameservirc.git] / gameserv / tcpclient.cpp
index 69d5dd768fa523e884102b4bac66595a7c772843..3e355d61757fc68384e983cd7d767c85f7684e81 100644 (file)
@@ -41,7 +41,7 @@ char *VERSION = "1.2.0 +devel";
 int sock;
 int day;
 
-List<aClient> clients;
+List<aClient> clients[U_TABLE_SIZE];
 
 void save_day();
 void load_day();
@@ -238,8 +238,14 @@ int main(int argc, char *argv[])
                if ((tempPtr = find((source + 1))))
                {
                    char *nick;
+                   unsigned long oldhv, newhv;
                    nick = strtok(NULL, " ");
+                   oldhv = HASH((unsigned char *) tempPtr->getNick(),
+                               U_TABLE_SIZE);
+                   newhv = HASH((unsigned char *) nick, U_TABLE_SIZE);
                    tempPtr->setNick(nick);
+                   clients[oldhv].remove(tempPtr);
+                   clients[newhv].insertAtBack(tempPtr);
                }
            }
            else
@@ -289,8 +295,8 @@ int main(int argc, char *argv[])
                #else
                    notice(s_GameServ, nick, welcomemsg, nick);
                #endif
-
-               clients.insertAtBack(newuser);
+               unsigned long hv = HASH((unsigned char *) nick, U_TABLE_SIZE);
+               clients[hv].insertAtBack(newuser);
                delete newuser;
            }
       #if defined(P10)
@@ -304,8 +310,9 @@ int main(int argc, char *argv[])
            if (z == ':')
                source++;
 
+           unsigned long hv = HASH((unsigned char *) source, U_TABLE_SIZE);
            if ((quitter = find(source)))
-               clients.remove(quitter);
+               clients[hv].remove(quitter);
            if ((quitter = findIRCplayer(source)))
            {
                if (player_fight(quitter))
@@ -459,7 +466,8 @@ aClient *find(const char *nick)
 aClient *findbyrealnick(char *realnick)
 {
    ListNode <aClient> *newPtr;
-    newPtr = clients.First();
+   unsigned long hv = HASH((unsigned char *) realnick, U_TABLE_SIZE);
+    newPtr = clients[hv].First();
 
     aClient *client = NULL;
 
@@ -486,7 +494,8 @@ aClient *findbyrealnick(char *realnick)
 aClient *findbynick(char *nick)
 {
     ListNode <aClient> *newPtr;
-    newPtr = clients.First();
+    unsigned long hv = HASH((unsigned char *) nick, U_TABLE_SIZE);
+    newPtr = clients[hv].First();
 
     aClient *client = NULL;
 
@@ -510,7 +519,8 @@ aClient *findIRCplayer(const char *nick)
     ListNode <aClient> *newPtr;
     aClient *p = NULL;
 
-    for (newPtr = players.First(); newPtr; newPtr = newPtr->Next())
+    unsigned long hv = HASH((unsigned char *) nick, U_TABLE_SIZE);
+    for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
     {
        p = newPtr->getData();
        #ifdef P10
@@ -527,8 +537,8 @@ aClient *findplayer(const char *name)
 {
     ListNode <aClient> *newPtr;
     Player *p = NULL;
-
-    for (newPtr = players.First(); newPtr; newPtr = newPtr->Next())
+    unsigned long hv = HASH((unsigned char *) name, U_TABLE_SIZE);
+    for (newPtr = players[hv].First(); newPtr; newPtr = newPtr->Next())
     {
        p = newPtr->getData()->stats;
        if (stricmp(p->name, name) == 0)
@@ -541,7 +551,8 @@ aClient *findplayer(const char *name)
 aClient *findbynick(const char *nick)
 {
     ListNode <aClient> *newPtr;
-    newPtr = clients.First();
+    unsigned long hv = HASH((unsigned char *) nick, U_TABLE_SIZE);
+    newPtr = clients[hv].First();
 
     aClient *client = NULL;