[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[netPanzer-CVS] netpanzer/src/NetPanzer Interfaces/PlayerGameMa...
From: |
Hankin Chick |
Subject: |
[netPanzer-CVS] netpanzer/src/NetPanzer Interfaces/PlayerGameMa... |
Date: |
Mon, 17 Nov 2003 08:14:32 -0500 |
CVSROOT: /cvsroot/netpanzer
Module name: netpanzer
Branch:
Changes by: Hankin Chick <address@hidden> 03/11/17 08:14:32
Modified files:
src/NetPanzer/Interfaces: PlayerGameManager.cpp
src/NetPanzer/Views/MainMenu/Multi: GameServerList.hpp
IRCLobby.cpp IRCLobby.hpp
IRCLobbyView.cpp
IRCLobbyView.hpp
PlayerNameView.cpp
PlayerNameView.hpp
Log message:
PING/PONG the irc server every 2mins.
reconnect irc if anything bad happens.
renames usernames using numbers instead of _
IRCLobby can now works independantly without netpanzer.
Patches:
Index: netpanzer/src/NetPanzer/Interfaces/PlayerGameManager.cpp
diff -u netpanzer/src/NetPanzer/Interfaces/PlayerGameManager.cpp:1.6
netpanzer/src/NetPanzer/Interfaces/PlayerGameManager.cpp:1.7
--- netpanzer/src/NetPanzer/Interfaces/PlayerGameManager.cpp:1.6 Tue Nov
11 09:42:31 2003
+++ netpanzer/src/NetPanzer/Interfaces/PlayerGameManager.cpp Mon Nov 17
08:14:30 2003
@@ -200,14 +200,17 @@
Desktop::add(new InterfaceView());
Desktop::add(new FlagSelectionView());
Desktop::add(new HostOptionsView());
- Desktop::add(new PlayerNameView());
+ PlayerNameView *playernameview=new PlayerNameView();
+ Desktop::add(playernameview);
Desktop::add(new ResignView());
Desktop::add(new AreYouSureResignView());
Desktop::add(new AreYouSureExitView());
//winsock hack
Desktop::add(new IPAddressView());
- Desktop::add(new IRCLobbyView());
+ IRCLobbyView *irc_lobby_view=new IRCLobbyView();
+ Desktop::add(irc_lobby_view);
+ irc_lobby_view->setNotifyIRCChangeName((NotifyIRCChangeName
*)playernameview);
Desktop::setVisibilityAllWindows(false);
Desktop::setVisibility("MainView", true);
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/GameServerList.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/GameServerList.hpp:1.2
netpanzer/src/NetPanzer/Views/MainMenu/Multi/GameServerList.hpp:1.3
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/GameServerList.hpp:1.2 Thu Nov
6 12:53:26 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/GameServerList.hpp Mon Nov
17 08:14:31 2003
@@ -21,8 +21,6 @@
#include <vector>
#include <string>
-#include "View.hpp"
-#include "Surface.hpp"
#include "GameServer.hpp"
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.10
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.11
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp:1.10 Sun Nov
16 17:56:41 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.cpp Mon Nov 17
08:14:31 2003
@@ -15,13 +15,19 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <config.h>
-#include <SDLNet.hpp>
+
+// can be used independantly of netpanzer, see sample program at the end
+
+#include <SDL_net.h>
#include <sstream>
+
+#ifndef WITHOUT_NETPANZER
+#include <config.h>
+
+#include <SDLNet.hpp>
#include "Log.hpp"
-#include "IRCLobby.hpp"
#include "IRCLobbyView.hpp"
#include "PlayerInterface.hpp"
#include "GameConfig.hpp"
@@ -31,18 +37,78 @@
#include "PlayerNameView.hpp"
#include "GameControlRulesDaemon.hpp"
+#else
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#ifndef _NETPANZER_DEFAULT_PORT_TCP
+#define _NETPANZER_DEFAULT_PORT_TCP 3030
+#endif
+
+#ifndef LOG
+#define LOG(x) printf x
+#endif
+
+#ifndef Exception
+class Exception : public std::exception {
+ char* message;
+public:
+ Exception(const char* msg, ...) throw() {
+ va_list args;
+ va_start(args, msg);
+
+ message = new char[255];
+ vsnprintf(message, 255, msg, args);
+
+ va_end(args);
+ }
+ ~Exception() throw() { delete[] message; }
+ const char* what() const throw() { return message; }
+};
+#endif
+
+
+
+
+
+// split server:port string, doesn't always set the port
+static void splitServerPort(const std::string& server,std::string& address,int
*port)
+{
+ unsigned int colon=server.find(':',0);
+ if(colon==std::string::npos) {
+ address=server;
+ }
+ else {
+ address=server.substr(0,colon);
+ colon++;
+ std::string port_str(server.substr(colon,server.length()-colon));
+ port[0]=atoi(port_str.c_str());
+ }
+}
+
+
+
+#endif
+
+#include "IRCLobby.hpp"
+
static const char* ask_server_running_mess = "Who's running a server?";
static const char* server_running_mess = "I'm running";
IRCLobby::IRCLobby(const std::string& server,
const std::string& nick,
- const std::string& newchannelname)
- : irc_server_socket(0), channel_name(newchannelname), nickname(nick),
- game_servers(0), running_thread(0)
+ const std::string& newchannelname
+ )
+ : game_servers(0),
+ irc_server_socket(0), channel_name(newchannelname), nickname(nick),
+ running_thread(0)
{
serveraddress=server;
game_servers=new GameServerList();
game_servers_mutex=SDL_CreateMutex();
+ change_name=0;
+ expected_ping=0;
setNickName(nick);
@@ -52,10 +118,14 @@
IRCLobby::~IRCLobby()
{
stopThread();
-
SDL_DestroyMutex(game_servers_mutex);
- delete game_servers;
- game_servers=0;
+LOG(("delete lobby"));
+}
+
+void IRCLobby::restartThread()
+{
+ stopThread();
+ startMessagesThread();
}
void IRCLobby::setNickName(const std::string &nick)
@@ -77,9 +147,7 @@
}
ircname[i] = 0;
nickname=ircname;
- if(playernameview) {
- playernameview->setString(ircname);
- }
+ if(change_name) { change_name->changeIRCName(nickname); }
}
void IRCLobby::changeNickName(const std::string &nick)
@@ -105,8 +173,11 @@
SDLNet_TCP_Close(irc_server_socket);
irc_server_socket=0;
}
+ delete game_servers;
+ game_servers=0;
}
+#ifndef WITHOUT_NETPANZER
// send server info to someone
void IRCLobby::sendServerInfo(const std::string& dest)
{
@@ -121,31 +192,44 @@
return sendIRCMessageLine(buffer.str(), dest);
}
+
+#endif
+
+
void IRCLobby::connectToServer()
{
IPaddress addr;
+ expected_ping=0;
- const std::string &server=((const std::string
&)gameconfig->proxyserver).size()>0 ? ((const std::string
&)gameconfig->proxyserver): serveraddress;
+#ifndef WITHOUT_NETPANZER
+ const std::string &proxyserver=gameconfig->proxyserver;
+#else
+ const std::string proxyserver;
+#endif
+ const std::string &server=proxyserver.size()>0 ? proxyserver:
serveraddress;
int sport=6667;
- std::string saddress;
- UtilInterface::splitServerPort(server,saddress,&sport);
+#ifndef WITHOUT_NETPANZER
+ UtilInterface::splitServerPort(server,server_host,&sport);
+#else
+ ::splitServerPort(server,server_host,&sport);
+#endif
// some old versions of SDL_net take a char* instead of const char*
- if(SDLNet_ResolveHost(&addr, const_cast<char*>(saddress.c_str()), sport) <
0)
+ if(SDLNet_ResolveHost(&addr, const_cast<char*>(server_host.c_str()),
sport) < 0)
throw Exception("Couldn't resolve server address '%s'",
- saddress.c_str());
+ server_host.c_str());
irc_server_socket = SDLNet_TCP_Open(&addr);
if(!irc_server_socket)
throw Exception("Couldn't connect to irc server '%s': %s",
- saddress.c_str(), SDLNet_GetError());
-
+ server.c_str(), SDLNet_GetError());
-
- if(((const std::string &)gameconfig->proxyserver).size()>0) {
+#ifndef WITHOUT_NETPANZER
+ if(proxyserver.size()>0) {
UtilInterface::sendProxyConnect(irc_server_socket,serveraddress);
}
+#endif
std::stringstream buffer;
buffer.str("");
@@ -176,6 +260,7 @@
buffer << "JOIN " << channel_name;
sendIRCLine(buffer.str());
+#ifndef WITHOUT_NETPANZER
if(gameconfig->hostorjoin== _game_session_host) {
// tell everyone the server just started
sendServerInfo(channel_name);
@@ -183,10 +268,15 @@
else if(gameconfig->hostorjoin== _game_session_join) {
refreshServerList();
}
+#else
+ refreshServerList();
+#endif
}
void IRCLobby::refreshServerList()
{
+ delete game_servers;
+ game_servers=new GameServerList();
std::stringstream buffer;
buffer << "-" << ask_server_running_mess;
@@ -200,14 +290,44 @@
sendIRCLine(str);
}
+void IRCLobby::sendPingMessage()
+{
+ std::stringstream ping;
+ ping << "PING " << server_host;
+ sendIRCLine(ping.str());
+ expected_ping=SDL_GetTicks()+15000;
+}
+
int IRCLobby::messagesThreadEntry(void* data)
{
IRCLobby* t = (IRCLobby*) data;
- // this is here so that the thread is started before we connect
- // to the irc server otherwise the main thread will halt
- // if we don't have access to the irc server.
- t->connectToServer();
- t->processMessages();
+ int restart_delay=5000; // time to wait before starting the server
+ while(1) {
+ // this is here so that the thread is started before we connect
+ // to the irc server otherwise the main thread will halt
+ // if we don't have access to the irc server.
+ Uint32 start_tick=SDL_GetTicks();
+ try {
+ t->connectToServer();
+ t->processMessages();
+ } catch(std::exception& e) {
+ LOG(("Exception in IRC Thread: %s, restarting in %i secs",
e.what(),(restart_delay/1000) ));
+ t->addChatMessage("Error",e.what());
+
+ Uint32 run_length=SDL_GetTicks()-start_tick;
+ SDL_Delay(restart_delay);
+ if(run_length>(15*60*1000)) {
+ // we managed to run for 15mins, reset the delay
+ restart_delay=5000;
+ }
+ else { restart_delay*=2; }
+ // ... wait a while and try to reconnect
+ continue;
+ } catch(...) {
+ break;
+ }
+ break;
+ }
return 0;
}
@@ -228,14 +348,7 @@
}
while(1) {
- try {
- processMessage();
- } catch(std::exception& e) {
- LOG(("Exception in IRC Thread: %s", e.what()));
- break;
- } catch(...) {
- break;
- }
+ processMessage();
}
}
@@ -271,7 +384,9 @@
char *host, *mess, *host_end, *user_end, *code;
readIRCLine(buf, sizeof(buf));
+#ifndef WITHOUT_NETPANZER
LOGGER.debug("irc:%s",buf);
+#endif
if(buf[0]!=':')
return;
@@ -280,19 +395,29 @@
// skip 1 word and spaces behind it
while(*code && !isspace(*code)) { code++; }
while(*code && isspace(*code)) { code++; }
+ char *code_end=code;
+ while(*code_end && !isspace(*code_end)) code_end++;
+ *code_end=0;
int code_i=atoi(code);
- if((mess=strchr(buf+1,':'))==NULL) {
+ if((mess=strchr(code_end+1,':'))==NULL) {
return;
}
mess++;
if(code_i == 433) {
- // wrong user name, add _ at the end like chatzilla does
+ // wrong user name, change the number at the end
char newplayer[256];
- strncpy(newplayer,playernameview->getString(),sizeof(newplayer)-2);
+ char *p;
+ strncpy(newplayer,nickname.c_str(),sizeof(newplayer)-2);
newplayer[sizeof(newplayer)-2]=0;
- strcat(newplayer,"_");
+ p=strchr(newplayer,0);
+ if(isdigit(p[-1])) {
+ p--;
+ while(isdigit(*p) && p>newplayer) p--;
+ p++;
+ }
+ snprintf(p,(newplayer+sizeof(newplayer))-p,"%i",atoi(p)+1);
changeNickName(newplayer);
return;
}
@@ -304,11 +429,21 @@
addChatMessage("Error",mess);
LOG(("IRC:%s",buf));
}
- if(code_i==353 || strncmp(code,"NOTICE ",7)==0) {
+ if(code_i==353 || strcmp(code,"NOTICE")==0) {
addChatMessage("Lobby",mess);
return;
}
+ if(strcmp(code,"PONG")==0) {
+ expected_ping=0;
+ }
+ if(strcmp(code,"PING")==0) {
+ std::stringstream pong;
+ pong << "PONG " <<(code+5);
+ sendIRCLine(pong.str());
+ return;
+ }
+
// get remote user/host
if(
(host=strchr(buf,'@'))==0
@@ -319,22 +454,26 @@
*host++=0;
*user_end++=0;
- if(strncmp(code,"JOIN ",5)==0) {
+ if(strcmp(code,"JOIN")==0) {
std::string joined(buf+1);
joined+=" has arrived in lobby";
addChatMessage("",joined);
+#ifndef WITHOUT_NETPANZER
if(gameconfig->hostorjoin== _game_session_host) {
LOG(("%s",joined.c_str()));
}
+#endif
return;
}
- if(strncmp(code,"PART ",5)==0 || strncmp(code,"QUIT ",5)==0) {
+ if(strcmp(code,"PART")==0 || strcmp(code,"QUIT")==0) {
std::string leave(buf+1);
leave+=" has left the lobby";
addChatMessage("",leave);
+#ifndef WITHOUT_NETPANZER
if(gameconfig->hostorjoin== _game_session_host) {
LOG(("%s",leave.c_str()));
}
+#endif
return;
}
@@ -344,65 +483,68 @@
}
*host_end++=0;
while(isspace(*host_end)) host_end++;
- if(strncmp(host_end,"PRIVMSG ",8)!=0) {
+ if(strcmp(code,"PRIVMSG")!=0) {
return;
}
if(mess[0]=='#') {
// this is a chat message
addChatMessage(buf+1, mess+1);
+#ifndef WITHOUT_NETPANZER
if(gameconfig->hostorjoin== _game_session_host) {
LOG(("IRC message:%s:%s",buf+1,mess+1));
}
+#endif
return;
}
if(mess[0]=='-') {
// this is an internal message
+#ifndef WITHOUT_NETPANZER
if(strcmp(mess+1, ask_server_running_mess)==0) {
if(gameconfig->hostorjoin== _game_session_host) {
// reply with server details
sendServerInfo(buf+1);
}
}
- else
if(strncmp(mess+1,server_running_mess,sizeof(server_running_mess)-1)==0) {
+ else
+#endif
+
if(strncmp(mess+1,server_running_mess,sizeof(server_running_mess)-1)==0) {
// add a server to the list
- if(gameconfig->hostorjoin== _game_session_join) {
- const char *p=mess+strlen(server_running_mess)+1;
- const char *map;
- int players=atoi(p);
- if((p=strchr(p,'/'))==0) {
- LOG(("bad server description: %s\n",mess));
- return;
- }
- int max_players=atoi(++p);
- int port=_NETPANZER_DEFAULT_PORT_TCP;
- char *port_str;
- if((port_str=strstr(p,"port:"))!=0) {
- port=atoi(port_str+5);
- }
- if((map=strstr(p,"map:"))==0) {
- LOG(("no map name: %s\n",mess));
- return;
- }
- map+=4;
+ const char *p=mess+strlen(server_running_mess)+1;
+ const char *map;
+ int players=atoi(p);
+ if((p=strchr(p,'/'))==0) {
+ LOG(("bad server description: %s\n",mess));
+ return;
+ }
+ int max_players=atoi(++p);
+ int port=_NETPANZER_DEFAULT_PORT_TCP;
+ char *port_str;
+ if((port_str=strstr(p,"port:"))!=0) {
+ port=atoi(port_str+5);
+ }
+ if((map=strstr(p,"map:"))==0) {
+ LOG(("no map name: %s\n",mess));
+ return;
+ }
+ map+=4;
- GameServer *server
- = game_servers->find(host, port);
- if(server==0) {
- SDL_mutexP(game_servers_mutex);
- game_servers->push_back(
- GameServer(host, port,
- buf+1, map, players, max_players));
- SDL_mutexV(game_servers_mutex);
- }
- else {
- server->user = buf+1;
- server->map = map;
- server->playercount = players;
- server->max_players = max_players;
- }
+ GameServer *server
+ = game_servers->find(host, port);
+ if(server==0) {
+ SDL_mutexP(game_servers_mutex);
+ game_servers->push_back(
+ GameServer(host, port,
+ buf+1, map, players, max_players));
+ SDL_mutexV(game_servers_mutex);
+ }
+ else {
+ server->user = buf+1;
+ server->map = map;
+ server->playercount = players;
+ server->max_players = max_players;
}
}
}
@@ -460,11 +602,19 @@
SDLNet_SocketSet sock_set=SDLNet_AllocSocketSet(1);
SDLNet_TCP_AddSocket(sock_set,irc_server_socket);
+ int no_activity=0;
try {
while(buf_upto < buf_end) {
SDLNet_CheckSockets(sock_set, 1000);
- if(!SDLNet_SocketReady(irc_server_socket))
+ if(!SDLNet_SocketReady(irc_server_socket)) {
+ if(++no_activity>=(60*2) && !expected_ping) {
+ sendPingMessage();
+ }
+ if(expected_ping && expected_ping<SDL_GetTicks()) {
+ throw Exception("no pong received after ping");
+ }
continue;
+ }
if(SDLNet_TCP_Recv(irc_server_socket,&ch,1)<0)
throw Exception("Couldn't read TCP: %s",
@@ -484,4 +634,38 @@
SDLNet_FreeSocketSet(sock_set);
*buf_upto=0;
}
+
+
+
+#if 0
+
+// sample program to use this class...
+
+#include <unistd.h>
+#define WITHOUT_NETPANZER
+#include "IRCLobby.cpp"
+
+
+int main()
+{
+ IRCLobby *lobby=new
IRCLobby("irc.freenode.net","testnpsrv","#netpanzerlob");
+ sleep(30);
+
+ SDL_mutexP(lobby->game_servers_mutex);
+ GameServerList::iterator i;
+ GameServerList* serverlist = lobby->game_servers;
+ for(i=serverlist->begin(); i!=serverlist->end(); i++) {
+ const GameServer* server = &(*i);
+ printf("%s is running %s (%i/%i) on %s:%i\n",
+ i->user.c_str(),i->map.c_str(),
+ i->playercount,i->max_players,
+ i->host.c_str(),i->port
+ );
+ }
+ SDL_mutexV(lobby->game_servers_mutex);
+
+
+ delete lobby;
+}
+#endif
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.6
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.7
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp:1.6 Sat Nov
15 21:24:58 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobby.hpp Mon Nov 17
08:14:31 2003
@@ -24,14 +24,20 @@
#include <SDL_thread.h>
#include <SDL_net.h>
-#include "View.hpp"
-#include "Surface.hpp"
#include "GameServer.hpp"
#include "GameServerList.hpp"
#include "IRCChatMessage.hpp"
+class IRCLobby;
class IRCLobbyView;
+class NotifyIRCChangeName {
+public:
+ virtual void changeIRCName(std::string &newname) = 0;
+ friend class IRCLobby;
+};
+
+
//---------------------------------------------------------------------------
class IRCLobby
{
@@ -49,6 +55,10 @@
bool isConnected() const
{ return irc_server_socket != 0; }
void changeNickName(const std::string &nick);
+ void restartThread(); // restart thread & reconnect irc
+
+ GameServerList* game_servers;
+ NotifyIRCChangeName* change_name;
private:
void startMessagesThread();
@@ -67,6 +77,7 @@
void sendLoginInfo();
void setNickName(const std::string &nick);
void sendNickName();
+ void sendPingMessage();
void addChatMessage(const std::string& user, const std::string& message);
SDL_mutex *game_servers_mutex;
@@ -77,8 +88,9 @@
std::string channel_name;
std::string nickname;
std::string serveraddress;
+ std::string server_host;
std::list<IRCChatMessage> chat_messages;
- GameServerList* game_servers;
+ unsigned int expected_ping;
SDL_Thread *running_thread;
};
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.9
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.10
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.9 Sat Nov
15 21:24:58 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp Mon Nov
17 08:14:31 2003
@@ -33,6 +33,7 @@
: View()
{
lobby_connection=0;
+ change_name=0;
lobby_view_height=160;
total_displayed_servers=0;
setSearchName("IRCLobbyView");
@@ -218,6 +219,7 @@
stopIRC();
lobby_connection=new IRCLobby(gameconfig->lobbyserver,
gameconfig->playername, "#netpanzerlob");
+ lobby_connection->change_name=change_name;
} catch(std::exception& e) {
LOG(("Couldn't connect to irc lobby: %s", e.what()));
error_message = e.what();
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.7
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.8
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.7 Sat Nov
15 21:24:58 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp Mon Nov
17 08:14:31 2003
@@ -44,11 +44,15 @@
lobby_connection->changeNickName(s);
}
}
+ void setNotifyIRCChangeName(NotifyIRCChangeName *cn) {
+ change_name=cn;
+ }
private:
static void buttonRefresh();
static void chatReturnPressed(cInputField* input);
+ NotifyIRCChangeName *change_name;
int server_list_end_y;
int server_list_end_x;
int chat_list_end_y;
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.11
netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.12
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp:1.11
Sun Nov 16 17:56:41 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.cpp Mon Nov
17 08:14:31 2003
@@ -46,13 +46,12 @@
init();
// XXX ugly
- if(!playernameview)
- playernameview = this;
+// if(!playernameview) playernameview = this;
} // end PlayerNameView::PlayerNameView
PlayerNameView::~PlayerNameView()
{
- playernameview=0;
+// playernameview=0;
}
// init
@@ -83,5 +82,12 @@
}
}
+void PlayerNameView::changeIRCName(std::string &newname)
+{
+ setString(newname.c_str());
+ gameconfig->playername=newname;
+}
+
+
// sometime we shoudl eleminate all these global vars...
-PlayerNameView* playernameview = 0;
+//PlayerNameView* playernameview = 0;
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.5
netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.6
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp:1.5 Sat Nov
15 21:24:58 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/PlayerNameView.hpp Mon Nov
17 08:14:31 2003
@@ -20,10 +20,11 @@
#include "View.hpp"
#include "Surface.hpp"
+#include "IRCLobby.hpp"
#include "cGrowList.hpp"
//---------------------------------------------------------------------------
-class PlayerNameView : public View
+class PlayerNameView : public View,NotifyIRCChangeName
{
public:
PlayerNameView();
@@ -36,6 +37,7 @@
void init();
void setString(const char *s) { playerName.setString(s); }
const char *getString() { return playerName.getString(); }
+ virtual void changeIRCName(std::string &newname);
private:
static void returnPressed(cInputField* input);
@@ -46,6 +48,6 @@
cInputFieldString playerName;
}; // end PlayerNameView
-extern PlayerNameView* playernameview;
+//extern PlayerNameView* playernameview;
#endif // end __PlayerNameView_hpp__
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [netPanzer-CVS] netpanzer/src/NetPanzer Interfaces/PlayerGameMa...,
Hankin Chick <=