[Top][All Lists]
[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);
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/08
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Matthias Braun, 2003/11/12
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/14
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/15
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR...,
Hankin Chick <=
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/16
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/17
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/19
- [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR..., Hankin Chick, 2003/11/23