netpanzer-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR...


From: Hankin Chick
Subject: [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR...
Date: Sat, 15 Nov 2003 21:25:00 -0500

CVSROOT:        /cvsroot/netpanzer
Module name:    netpanzer
Branch:         
Changes by:     Hankin Chick <address@hidden>   03/11/15 21:24:58

Modified files:
        src/NetPanzer/Views/MainMenu/Multi: IRCLobby.cpp IRCLobby.hpp 
                                            IRCLobbyView.cpp 
                                            IRCLobbyView.hpp 
                                            PlayerNameView.cpp 
                                            PlayerNameView.hpp 

Log message:
        automatically add _ to the name if it's taken, like chatzilla
        change nickname without relogging in

Patches:
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.8 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.9
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.8       Thu Nov 
13 08:12:20 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp   Sat Nov 15 
21:24:57 2003
@@ -22,11 +22,13 @@
 
 #include "Log.hpp"
 #include "IRCLobby.hpp"
+#include "IRCLobbyView.hpp"
 #include "PlayerInterface.hpp"
 #include "GameConfig.hpp"
 #include "NetworkGlobals.hpp" 
 #include "Exception.hpp"
 #include "UtilInterface.hpp"
+#include "PlayerNameView.hpp"
 
 static const char* ask_server_running_mess = "Who's running a server?";
 static const char* server_running_mess = "I'm running";
@@ -41,6 +43,8 @@
     game_servers=new GameServerList();
     game_servers_mutex=SDL_CreateMutex();
 
+    setNickName(nick);
+
     startMessagesThread();
 }
 
@@ -53,6 +57,37 @@
     game_servers=0;
 }
 
+void IRCLobby::setNickName(const std::string &nick)
+{
+    const char *playername = nick.c_str();
+    // only some names are allowed in irc names
+    char ircname[1024];
+    int i;
+    for(i=0; i<1023; i++) {
+        char c = playername[i];
+        if(c==0)
+            break;
+        // don't use isalpha here since it only behaves correctly (for irc
+        // nicknames) in the C locale setting
+        if( (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')
+          || c == ':' ||  c=='_') {
+            ircname[i] = c;
+        }
+    }
+    ircname[i] = 0;
+    nickname=ircname;
+    playernameview->setString(ircname);
+}
+
+void IRCLobby::changeNickName(const std::string &nick)
+{
+    std::stringstream notice;
+    notice << "Changing nickname to: " << nick;
+    addChatMessage("Notice",notice.str());
+    setNickName(nick);
+    sendNickName();
+}
+
 void IRCLobby::stopThread()
 {
     if(!running_thread)
@@ -103,39 +138,35 @@
         throw Exception("Couldn't connect to irc server '%s': %s",
                 saddress.c_str(),  SDLNet_GetError());
 
-    // login
-    const char *playername = nickname.c_str();
 
-    // only some names are allowed in irc names
-    char ircname[1024];
-    int i;
-    for(i=0; i<1023; i++) {
-        char c = playername[i];
-        if(c==0)
-            break;
-        // don't use isalpha here since it only behaves correctly (for irc
-        // nicknames) in the C locale setting
-        if( (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')
-          || c == ':') {
-            ircname[i] = c;
-        }
-    }
-    ircname[i] = 0;
-
-   
-    std::stringstream buffer;
 
     if(((const std::string &)gameconfig->proxyserver).size()>0) {
         UtilInterface::sendProxyConnect(irc_server_socket,serveraddress);
     }
 
+    std::stringstream buffer;
     buffer.str("");
-    buffer << "NICK " << ircname;
+    buffer << "USER " << nickname << " 0 * :" << nickname;
     sendIRCLine(buffer.str());
 
+    sendNickName();
+}
+
+void IRCLobby::sendNickName()
+{
+    std::stringstream buffer;
+
     buffer.str("");
-    buffer << "USER " << ircname << " 0 * :" << ircname;
+    buffer << "NICK " << nickname;
     sendIRCLine(buffer.str());
+}
+
+void IRCLobby::sendLoginInfo()
+{
+    std::stringstream buffer;
+
+    sendNickName();
+
 
     // join channel
     buffer.str("");
@@ -237,6 +268,7 @@
     char *host, *mess, *host_end, *user_end, *code;
 
     readIRCLine(buf, sizeof(buf));
+    LOGGER.debug("irc:%s",buf);
     
     if(buf[0]!=':')
         return;
@@ -252,11 +284,24 @@
     }
     mess++;
 
+    if(code_i == 433) {
+        // wrong user name, add _ at the end like chatzilla does
+        char newplayer[256];
+        strncpy(newplayer,playernameview->getString(),sizeof(newplayer)-2);
+        newplayer[sizeof(newplayer)-2]=0;
+        strcat(newplayer,"_");
+        changeNickName(newplayer);
+        return;
+    }
+    if(code_i==1) {
+        sendLoginInfo();
+        return;
+    }
     if(code_i>=400 && code_i<500) {
         addChatMessage("Error",mess);
         LOG(("IRC:%s",buf));
     }
-    if(code_i==353) {
+    if(code_i==353 || strncmp(code,"NOTICE ",7)==0) {
         addChatMessage("Lobby",mess);
         return;
     }
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.5 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.6
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.5       Thu Nov 
13 08:12:20 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp   Sat Nov 15 
21:24:58 2003
@@ -48,6 +48,7 @@
 
     bool isConnected() const
     { return irc_server_socket != 0; }
+    void changeNickName(const std::string &nick);
 
 private:
     void startMessagesThread();
@@ -63,6 +64,9 @@
     void sendIRCMessageLine(const std::string& line, const std::string& to);
     void readIRCLine(char *buf, size_t buf_len);
     void connectToServer();
+    void sendLoginInfo();
+    void setNickName(const std::string &nick);
+    void sendNickName();
     void addChatMessage(const std::string& user, const std::string& message);
 
     SDL_mutex *game_servers_mutex;   
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.8 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.9
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.8   Sat Nov 
15 08:16:34 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp       Sat Nov 
15 21:24:58 2003
@@ -89,6 +89,7 @@
     
     int y=0;
     int disp_server_upto=0;
+    total_displayed_servers=0;
 
     if(lobby_connection == 0 || !lobby_connection->isConnected()) {
         clientArea.bltString(iXY(0,0),"Not connected to lobby", Color::white);
@@ -229,6 +230,14 @@
         delete lobby_connection;
     }
     lobby_connection=0;
+}
+
+void IRCLobbyView::restartIRC()
+{
+        // the crude method for nickname change...
+        stopIRC();
+        SDL_Delay(500);
+        startIRC();
 }
 
 IRCLobbyView* lobby_view = 0;
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.6 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.7
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.6   Sat Nov 
15 08:16:34 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp       Sat Nov 
15 21:24:58 2003
@@ -34,10 +34,16 @@
 
     void startIRC();
     void stopIRC();
+    void restartIRC();
 
     virtual void doDraw(Surface &windowArea, Surface &clientArea); 
     virtual int lMouseUp(const iXY &up_pos,const iXY &down_pos);
     virtual void actionPerformed(mMouseEvent me);
+    void changeNickName(const std::string &s) {
+        if(lobby_connection) {
+            lobby_connection->changeNickName(s);
+        }
+    }
 
 private:
     static void buttonRefresh();
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.9 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.10
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.9 Tue Nov 
11 08:42:06 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp     Sat Nov 
15 21:24:58 2003
@@ -78,10 +78,7 @@
 {
     gameconfig->playername = input->getDestString();
     if(lobby_view) {
-        // the crude method for nickname change...
-        lobby_view->stopIRC();
-        SDL_Delay(500);
-        lobby_view->startIRC();
+        lobby_view->changeNickName(gameconfig->playername);
     }
 }
 
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.4 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.5
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.4 Tue Nov 
11 08:42:06 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp     Sat Nov 
15 21:24:58 2003
@@ -34,6 +34,8 @@
     {}
 
     void init();
+    void setString(const char *s) { playerName.setString(s); }
+    const char *getString() { return playerName.getString(); }
 
 private:
     static void returnPressed(cInputField* input);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]