From: <z-...@us...> - 2007-11-09 17:07:23
|
Revision: 7367 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7367&view=rev Author: z-man Date: 2007-11-09 09:07:24 -0800 (Fri, 09 Nov 2007) Log Message: ----------- Fixed pedantic new warnings in GCC 4.1.3. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.h armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp 2007-11-05 17:02:25 UTC (rev 7366) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp 2007-11-09 17:07:24 UTC (rev 7367) @@ -377,7 +377,7 @@ , reverted_( false ) , group_( c ) , overrideGroupBehavior_( Behavior_Default ) - , overrideGroupBehaviorConf_( item.GetTitle() + "_OVERRIDE", reinterpret_cast< int & >( overrideGroupBehavior_ ) ) + , overrideGroupBehaviorConf_( item.GetTitle() + "_OVERRIDE", overrideGroupBehavior_ ) { sn_StrongWatchersAddRef(); sn_GetStrongWatchers().insert(this); @@ -588,18 +588,18 @@ static nConfItemVersionWatcher::Behavior sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Max ] = { - nConfItemVersionWatcher::Behavior_Block, - nConfItemVersionWatcher::Behavior_Block, - nConfItemVersionWatcher::Behavior_Nothing, - nConfItemVersionWatcher::Behavior_Block, - nConfItemVersionWatcher::Behavior_Nothing, + Behavior_Block, + Behavior_Block, + Behavior_Nothing, + Behavior_Block, + Behavior_Nothing, }; -static tSettingItem< int > sn_GroupBehaviorBreaks( "SETTING_LEGACY_BEHAVIOR_BREAKING", reinterpret_cast< int & >( sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Breaking] ) ); -static tSettingItem< int > sn_GroupBehaviorBumpy( "SETTING_LEGACY_BEHAVIOR_BUMPY", reinterpret_cast< int & >( sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Bumpy] ) ); -static tSettingItem< int > sn_GroupBehaviorAnnoyance( "SETTING_LEGACY_BEHAVIOR_ANNOYING", reinterpret_cast< int & >( sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Annoying] ) ); -static tSettingItem< int > sn_GroupBehaviorCheat( "SETTING_LEGACY_BEHAVIOR_CHEATING", reinterpret_cast< int & >( sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Cheating] ) ); -static tSettingItem< int > sn_GroupBehaviorDisplay( "SETTING_LEGACY_BEHAVIOR_VISUAL", reinterpret_cast< int & >( sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Visual] ) ); +static tSettingItem< nConfItemVersionWatcher::Behavior > sn_GroupBehaviorBreaks( "SETTING_LEGACY_BEHAVIOR_BREAKING", sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Breaking] ); +static tSettingItem< nConfItemVersionWatcher::Behavior > sn_GroupBehaviorBumpy( "SETTING_LEGACY_BEHAVIOR_BUMPY", sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Bumpy] ); +static tSettingItem< nConfItemVersionWatcher::Behavior > sn_GroupBehaviorAnnoyance( "SETTING_LEGACY_BEHAVIOR_ANNOYING", sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Annoying] ); +static tSettingItem< nConfItemVersionWatcher::Behavior > sn_GroupBehaviorCheat( "SETTING_LEGACY_BEHAVIOR_CHEATING", sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Cheating] ); +static tSettingItem< nConfItemVersionWatcher::Behavior > sn_GroupBehaviorDisplay( "SETTING_LEGACY_BEHAVIOR_VISUAL", sn_GroupBehaviors[ nConfItemVersionWatcher::Group_Visual] ); // ******************************************************************************************* // * Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.h 2007-11-05 17:02:25 UTC (rev 7366) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.h 2007-11-09 17:07:24 UTC (rev 7367) @@ -210,6 +210,18 @@ virtual void ReadVal(std::istream &s); }; +//! how we react on a client with a version incompatible with a setting +enum nConfigItemBehavior +{ + Behavior_Nothing = 0, //!< do nothing, let client on + Behavior_Revert = 1, //!< revert setting to default value + Behavior_Block = 2, //!< don't let the client play at all + Behavior_Default = 3 //!< do whatever someone else says +}; + +class nConfItemVersionWatcher; +tCONFIG_ENUM( nConfigItemBehavior ); + //! configuration item watcher that shuts out clients that don't support a certain interface class nConfItemVersionWatcher: public nIConfItemWatcher { @@ -226,14 +238,7 @@ Group_Max }; - //! how we react on a client with a version incompatible with a setting - enum Behavior - { - Behavior_Nothing = 0, //!< do nothing, let client on - Behavior_Revert = 1, //!< revert setting to default value - Behavior_Block = 2, //!< don't let the client play at all - Behavior_Default = 3 //!< do whatever someone else says - }; + typedef nConfigItemBehavior Behavior; nConfItemVersionWatcher( nConfItemBase & item, Group group, int min, int max = -1 ); //!< constructor virtual ~nConfItemVersionWatcher(); //!< destructor @@ -255,7 +260,7 @@ Group group_; //!< class of incompatibility Behavior overrideGroupBehavior_; //!< if set, the global behavior for the class gets ignored - tSettingItem< int > overrideGroupBehaviorConf_; //!< setting item for override + tSettingItem< Behavior > overrideGroupBehaviorConf_; //!< setting item for override }; //! convenience helper class: setting item and version watcher combined Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp 2007-11-05 17:02:25 UTC (rev 7366) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp 2007-11-09 17:07:24 UTC (rev 7367) @@ -199,7 +199,8 @@ virtual void MultMatrix(REAL mdata[4][4]){ End(true); tASSERT(sizeof(REAL) == sizeof(GLfloat)); - glMultMatrixf(reinterpret_cast<GLfloat *>(&mdata)); + REAL * mdat=&mdata[0][0]; + glMultMatrixf(reinterpret_cast<GLfloat *>(mdat)); }; virtual void IdentityMatrix(){ Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-05 17:02:25 UTC (rev 7366) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-09 17:07:24 UTC (rev 7367) @@ -558,8 +558,10 @@ static uSelectEntry<rSysDep::rSwapMode> swapMode_60Hz(swapMode,"$swapmode_60hz_text","$swapmode_60hz_help",rSysDep::rSwap_60Hz); */ -static tConfItem<int> swapModeCI("SWAP_MODE", reinterpret_cast< int & >( rSysDep::swapMode_ ) ); +tCONFIG_ENUM( rSysDep::rSwapMode ); +static tConfItem< rSysDep::rSwapMode > swapModeCI("SWAP_MODE", rSysDep::swapMode_ ); + static tConfItem<REAL> sgs("SPEED_GAUGE_SIZE",subby_SpeedGaugeSize); static tConfItem<REAL> sgx("SPEED_GAUGE_LOCX",subby_SpeedGaugeLocX); static tConfItem<REAL> sgy("SPEED_GAUGE_LOCY",subby_SpeedGaugeLocY); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2007-11-05 17:02:25 UTC (rev 7366) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2007-11-09 17:07:24 UTC (rev 7367) @@ -57,7 +57,8 @@ static tOutput *sg_StartHelpText = NULL; nServerInfo::QueryType sg_queryType = nServerInfo::QUERY_OPTOUT; -static tSettingItem< int > sg_query_type( "BROWSER_QUERY_FILTER", reinterpret_cast< int & >( sg_queryType ) ); +tCONFIG_ENUM( nServerInfo::QueryType ); +static tSettingItem< nServerInfo::QueryType > sg_query_type( "BROWSER_QUERY_FILTER", sg_queryType ); class gServerMenuItem; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-11 22:12:10
|
Revision: 7369 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7369&view=rev Author: z-man Date: 2007-11-11 14:12:10 -0800 (Sun, 11 Nov 2007) Log Message: ----------- Well, the new timer code did the same as the old one, so instead of activating it, the high resolution timer is now dropped in favor of the old low resolution timer (which is then smoothed) if the high resolution timer is making trouble. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eTimer.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eTimer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eTimer.cpp 2007-11-11 15:44:10 UTC (rev 7368) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eTimer.cpp 2007-11-11 22:12:10 UTC (rev 7369) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -223,6 +223,13 @@ double newTime=tSysTimeFloat(); static bool smooth = se_SmoothTime(); + + // recheck if no recording/playback is running + if ( !tRecorder::IsRunning() ) + { + smooth = !tTimerIsAccurate(); + } + if ( !smooth ) { // take it Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-11-11 15:44:10 UTC (rev 7368) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-11-11 22:12:10 UTC (rev 7369) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -80,68 +80,74 @@ #ifdef WIN32 #include <windows.h> -#include <sys/timeb.h> +#include <sys/timeb.h> #ifndef DEDICATED #include "rSDL.h" #endif -void GetTime( tTime & time ) +// flag indicating whether the HPC is reliable +static bool st_hpcReliable = true; + +void GetTimeInner( tTime & time ) { - struct _timeb tstruct; LARGE_INTEGER mtime,frq; // Check if high-resolution performance counter is supported if (!QueryPerformanceFrequency(&frq)) { - // Nope, not supported, do it the old way. - _ftime( &tstruct ); - time.microseconds = tstruct.millitm*1000; - time.seconds = tstruct.time; + st_hpcReliable = false; } - else + + if (st_hpcReliable) { QueryPerformanceCounter(&mtime); time.seconds = mtime.QuadPart/frq.QuadPart; time.microseconds = ( ( mtime.QuadPart - time.seconds * frq.QuadPart ) * 1000000 ) / frq.QuadPart; } + else + { + // Nope, not supported, do it the old way. + struct _timeb tstruct; + _ftime( &tstruct ); + time.microseconds = tstruct.millitm*1000; + time.seconds = tstruct.time; + } - /* + time.Normalize(); +} - // get time with millisecond accuracy - int milliseconds = GetTickCount(); - static int firstMilliseconds = milliseconds; - milliseconds -= firstMilliseconds; +void GetTime( tTime & relative ) +{ + tTime time; + GetTimeInner( time ); + static tTime start = time; + relative = time - start; - - // count overflows - static int lastMilliseconds = 0; - static int overflows = 0; - if ( milliseconds < lastMilliseconds ) + // detect timer trouble + if ( st_hpcReliable ) { - overflows++; - } - lastMilliseconds = milliseconds; + static struct tTime lastTime = relative; - // fill regular time - time.seconds = milliseconds/1000; - milliseconds -= time.seconds * 1000; - time.microseconds = milliseconds * 1000; + // test transition + //if ( relative.seconds > 10 ) + // lastTime.seconds = lastTime.seconds+1; - // add overflows - time.seconds += overflows * ( 0x100000000ll / 1000 ); - time.microseconds += overflows * ( 0x100000000ll % 1000 ) * 1000; + if ( (time - lastTime).seconds < 0 ) + { + st_hpcReliable = false; - */ - - time.Normalize(); - + GetTimeInner( time ); + start = start + time - lastTime; + relative = time - start; + } + lastTime = time; + } } //! returns true if a timer with more than millisecond accuracy is available bool tTimerIsAccurate() { - LARGE_INTEGER dummy; - return QueryPerformanceFrequency(&dummy); + return st_hpcReliable; } /* @@ -243,6 +249,12 @@ if ( start.microseconds == 0 && start.seconds == 0 ) start = time; relative = time - start; + + if ( relative.seconds > 20 ) + { + int x; + x = 0; + } } static bool s_delayedInPlayback = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-14 12:48:52
|
Revision: 7396 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7396&view=rev Author: z-man Date: 2007-11-14 04:48:55 -0800 (Wed, 14 Nov 2007) Log Message: ----------- "Rebeautified." Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gFloor.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10141 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10188 Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -519,7 +519,7 @@ { public: RecursionGuard( bool& recursion ) - :recursion_( recursion ) + :recursion_( recursion ) { recursion = false; } Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -1237,14 +1237,14 @@ } } else - if (se_interceptUnknownCommands) - { - handle_command_intercept(p, say); - } - else - { - sn_ConsoleOut("Unknown chat command.\n",p->Owner()); - } + if (se_interceptUnknownCommands) + { + handle_command_intercept(p, say); + } + else + { + sn_ConsoleOut("Unknown chat command.\n",p->Owner()); + } } #endif @@ -1358,215 +1358,215 @@ } else #endif - if (command == "/me") { - if ( IsSilencedWithWarning(p) ) - return; + if (command == "/me") { + if ( IsSilencedWithWarning(p) ) + return; - tColoredString console; - console << tColoredString::ColorString(1,1,1) << "* "; - console << *p; - console << tColoredString::ColorString(1,1,.5) << " " << msg; - console << tColoredString::ColorString(1,1,1) << " *"; + tColoredString console; + console << tColoredString::ColorString(1,1,1) << "* "; + console << *p; + console << tColoredString::ColorString(1,1,.5) << " " << msg; + console << tColoredString::ColorString(1,1,1) << " *"; - tColoredString forOldClients; - forOldClients << tColoredString::ColorString(1,1,1) << "*" - << tColoredString::ColorString(1,1,.5) << msg - << tColoredString::ColorString(1,1,1) << "*"; + tColoredString forOldClients; + forOldClients << tColoredString::ColorString(1,1,1) << "*" + << tColoredString::ColorString(1,1,.5) << msg + << tColoredString::ColorString(1,1,1) << "*"; - se_BroadcastChatLine( p, console, forOldClients ); - console << "\n"; - sn_ConsoleOut(console,0); - return; - } - else if (command == "/teamleave") { - if ( se_assignTeamAutomatically ) - { - sn_ConsoleOut(tOutput("$player_teamleave_disallowed"), p->Owner() ); + se_BroadcastChatLine( p, console, forOldClients ); + console << "\n"; + sn_ConsoleOut(console,0); return; } - if(!p->TeamChangeAllowed()) { - sn_ConsoleOut(tOutput("$player_disallowed_teamchange"), p->Owner() ); + else if (command == "/teamleave") { + if ( se_assignTeamAutomatically ) + { + sn_ConsoleOut(tOutput("$player_teamleave_disallowed"), p->Owner() ); + return; + } + if(!p->TeamChangeAllowed()) { + sn_ConsoleOut(tOutput("$player_disallowed_teamchange"), p->Owner() ); + return; + } + + eTeam * leftTeam = p->NextTeam(); + if ( leftTeam ) + { + if ( !leftTeam ) + leftTeam = p->CurrentTeam(); + + if ( leftTeam->NumPlayers() > 1 ) + { + sn_ConsoleOut( tOutput( "$player_leave_team_wish", + tColoredString::RemoveColors(p->GetName()), + tColoredString::RemoveColors(leftTeam->Name()) ) ); + } + else + { + sn_ConsoleOut( tOutput( "$player_leave_game_wish", + tColoredString::RemoveColors(p->GetName()) ) ); + } + } + + p->SetTeamWish(0); return; } + else if (command == "/teamshuffle" || command == "/shuffle") { + // team position shuffling. Allow players to change their team setup. + // syntax: + // /teamshuffle: shuffles you all the way to the outside. + // /teamshuffle <pos>: shuffles you to position pos + // /teamshuffle +/-<dist>: shuffles you dist to the outside/inside + // con << msgRest << "\n"; + int IDNow = p->TeamListID(); + if (!p->CurrentTeam()) + { + sn_ConsoleOut(tOutput("$player_not_on_team"), p->Owner()); + return; + } + int len = p->CurrentTeam()->NumPlayers(); + int IDWish = len-1; // default to shuffle to the outside - eTeam * leftTeam = p->NextTeam(); - if ( leftTeam ) - { - if ( !leftTeam ) - leftTeam = p->CurrentTeam(); + // but read the target position as additional parameter + if (msg.Len() > 1) + { + IDWish = IDNow; + if ( msg[0] == '+' ) + IDWish += msg.toInt(1); + else if ( msg[0] == '-' ) + IDWish -= msg.toInt(1); + else + IDWish = msg.toInt()-1; + } - if ( leftTeam->NumPlayers() > 1 ) + if (IDWish < 0) + IDWish = 0; + if (IDWish >= len) + IDWish = len-1; + + if ( !se_allowShuffleUp && IDWish < IDNow ) { - sn_ConsoleOut( tOutput( "$player_leave_team_wish", - tColoredString::RemoveColors(p->GetName()), - tColoredString::RemoveColors(leftTeam->Name()) ) ); + sn_ConsoleOut(tOutput("$player_noshuffleup"), p->Owner()); + return; } - else + + if( IDNow == IDWish ) { - sn_ConsoleOut( tOutput( "$player_leave_game_wish", - tColoredString::RemoveColors(p->GetName()) ) ); + sn_ConsoleOut(tOutput("$player_noshuffle"), p->Owner()); } - } - p->SetTeamWish(0); - return; - } - else if (command == "/teamshuffle" || command == "/shuffle") { - // team position shuffling. Allow players to change their team setup. - // syntax: - // /teamshuffle: shuffles you all the way to the outside. - // /teamshuffle <pos>: shuffles you to position pos - // /teamshuffle +/-<dist>: shuffles you dist to the outside/inside - // con << msgRest << "\n"; - int IDNow = p->TeamListID(); - if (!p->CurrentTeam()) - { - sn_ConsoleOut(tOutput("$player_not_on_team"), p->Owner()); + p->CurrentTeam()->Shuffle( IDNow, IDWish ); return; } - int len = p->CurrentTeam()->NumPlayers(); - int IDWish = len-1; // default to shuffle to the outside + // Send a message to your team + else if (command == "/team") { + eTeam *currentTeam = p->CurrentTeam(); - // but read the target position as additional parameter - if (msg.Len() > 1) - { - IDWish = IDNow; - if ( msg[0] == '+' ) - IDWish += msg.toInt(1); - else if ( msg[0] == '-' ) - IDWish -= msg.toInt(1); + if (currentTeam != NULL) // If a player has just joined the game, he is not yet on a team. Sending a /team message will crash the server + { + // Log message to server and sender + tColoredString messageForServerAndSender = se_BuildChatString(currentTeam, p, msg); + messageForServerAndSender << "\n"; + sn_ConsoleOut(messageForServerAndSender, 0); + sn_ConsoleOut(messageForServerAndSender, p->Owner()); + + // Send message to team-mates + int numTeamPlayers = currentTeam->NumPlayers(); + for (int teamPlayerIndex = 0; teamPlayerIndex < numTeamPlayers; teamPlayerIndex++) { + if (currentTeam->Player(teamPlayerIndex)->Owner() != p->Owner()) // Do not resend the message to yourself + se_SendTeamMessage(currentTeam, p, currentTeam->Player(teamPlayerIndex), msg); + } + } else - IDWish = msg.toInt()-1; - } + { + sn_ConsoleOut(tOutput("$player_not_on_team"), p->Owner()); + } - if (IDWish < 0) - IDWish = 0; - if (IDWish >= len) - IDWish = len-1; - - if ( !se_allowShuffleUp && IDWish < IDNow ) - { - sn_ConsoleOut(tOutput("$player_noshuffleup"), p->Owner()); return; } + else if (command == "/msg" ) { + int current_place=0; // current place in buffer_name. - if( IDNow == IDWish ) - { - sn_ConsoleOut(tOutput("$player_noshuffle"), p->Owner()); - } + // search for end of recipient and store recipient in buffer_name + tString buffer_name; + while (current_place < msg.Len() && !isblank(msg[current_place])) { + buffer_name[current_place]=msg[current_place]; + current_place++; + } + buffer_name[current_place] = '\0'; + buffer_name = ePlayerNetID::FilterName(buffer_name); - p->CurrentTeam()->Shuffle( IDNow, IDWish ); - return; - } - // Send a message to your team - else if (command == "/team") { - eTeam *currentTeam = p->CurrentTeam(); + // Check for match + int num_matches=-1; + ePlayerNetID * receiver = CompareBufferToPlayerNames(buffer_name, num_matches); - if (currentTeam != NULL) // If a player has just joined the game, he is not yet on a team. Sending a /team message will crash the server - { - // Log message to server and sender - tColoredString messageForServerAndSender = se_BuildChatString(currentTeam, p, msg); - messageForServerAndSender << "\n"; - sn_ConsoleOut(messageForServerAndSender, 0); - sn_ConsoleOut(messageForServerAndSender, p->Owner()); + // One match, send it. + if (num_matches == 1) { + // extract rest of message: it is the true message to send + tString msg_core; + while (current_place < msg.Len()-1) { + current_place++; + msg_core += msg[current_place]; + } - // Send message to team-mates - int numTeamPlayers = currentTeam->NumPlayers(); - for (int teamPlayerIndex = 0; teamPlayerIndex < numTeamPlayers; teamPlayerIndex++) { - if (currentTeam->Player(teamPlayerIndex)->Owner() != p->Owner()) // Do not resend the message to yourself - se_SendTeamMessage(currentTeam, p, currentTeam->Player(teamPlayerIndex), msg); - } - } - else - { - sn_ConsoleOut(tOutput("$player_not_on_team"), p->Owner()); - } + // build chat string + tColoredString toServer = se_BuildChatString( p, receiver, msg_core ); + toServer << '\n'; - return; - } - else if (command == "/msg" ) { - int current_place=0; // current place in buffer_name. + // log locally + sn_ConsoleOut(toServer,0); - // search for end of recipient and store recipient in buffer_name - tString buffer_name; - while (current_place < msg.Len() && !isblank(msg[current_place])) { - buffer_name[current_place]=msg[current_place]; - current_place++; - } - buffer_name[current_place] = '\0'; - buffer_name = ePlayerNetID::FilterName(buffer_name); + if ( p->CurrentTeam() == receiver->CurrentTeam() || !IsSilencedWithWarning(p) ) + { + // log to sender's console + sn_ConsoleOut(toServer, p->Owner()); - // Check for match - int num_matches=-1; - ePlayerNetID * receiver = CompareBufferToPlayerNames(buffer_name, num_matches); + // send to receiver + if ( p->Owner() != receiver->Owner() ) + se_SendPrivateMessage( p, receiver, msg_core ); + } - // One match, send it. - if (num_matches == 1) { - // extract rest of message: it is the true message to send - tString msg_core; - while (current_place < msg.Len()-1) { - current_place++; - msg_core += msg[current_place]; + return; } - - // build chat string - tColoredString toServer = se_BuildChatString( p, receiver, msg_core ); - toServer << '\n'; - - // log locally - sn_ConsoleOut(toServer,0); - - if ( p->CurrentTeam() == receiver->CurrentTeam() || !IsSilencedWithWarning(p) ) + // More than than one match for the current buffer. Complain about that. + else if (num_matches > 1) { + tOutput toSender; + toSender.SetTemplateParameter(1, buffer_name); + toSender << "$msg_toomanymatches"; + sn_ConsoleOut(toSender,p->Owner()); + return; + } + // 0 matches. The user can't spell. Complain about that, too. + else { + tOutput toSender; + toSender.SetTemplateParameter(1, buffer_name); + toSender << "$msg_nomatch"; + sn_ConsoleOut(toSender, p->Owner()); + return; + } + } +#ifdef DEDICATED + else if (command == "/players") { + for ( int i2 = se_PlayerNetIDs.Len()-1; i2>=0; --i2 ) { - // log to sender's console - sn_ConsoleOut(toServer, p->Owner()); - - // send to receiver - if ( p->Owner() != receiver->Owner() ) - se_SendPrivateMessage( p, receiver, msg_core ); + ePlayerNetID* p2 = se_PlayerNetIDs(i2); + tString tos; + tos << p2->Owner(); + tos << ": "; + tos << p2->GetUserName(); + if (p2->isLoggedIn()) + tos << " (logged in)"; + else + tos << " (logged out)"; + tos << "\n"; + sn_ConsoleOut(tos, p->Owner()); } - return; } - // More than than one match for the current buffer. Complain about that. - else if (num_matches > 1) { - tOutput toSender; - toSender.SetTemplateParameter(1, buffer_name); - toSender << "$msg_toomanymatches"; - sn_ConsoleOut(toSender,p->Owner()); - return; - } - // 0 matches. The user can't spell. Complain about that, too. else { - tOutput toSender; - toSender.SetTemplateParameter(1, buffer_name); - toSender << "$msg_nomatch"; - sn_ConsoleOut(toSender, p->Owner()); + handle_chat_admin_commands(p, say); return; } - } -#ifdef DEDICATED - else if (command == "/players") { - for ( int i2 = se_PlayerNetIDs.Len()-1; i2>=0; --i2 ) - { - ePlayerNetID* p2 = se_PlayerNetIDs(i2); - tString tos; - tos << p2->Owner(); - tos << ": "; - tos << p2->GetUserName(); - if (p2->isLoggedIn()) - tos << " (logged in)"; - else - tos << " (logged out)"; - tos << "\n"; - sn_ConsoleOut(tos, p->Owner()); - } - return; - } - else { - handle_chat_admin_commands(p, say); - return; - } #endif } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -2700,9 +2700,9 @@ } else if ( name != oldName ) { - con << "Name of server " << ToString( *this ) - << " changed from \"" << tColoredString::RemoveColors(oldName) - << "\" to \"" << tColoredString::RemoveColors(name) << "\"\n"; + con << "Name of server " << ToString( *this ) + << " changed from \"" << tColoredString::RemoveColors(oldName) + << "\" to \"" << tColoredString::RemoveColors(name) << "\"\n"; } // broadcast the server to the other master servers Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rGLRender.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -199,7 +199,7 @@ virtual void MultMatrix(REAL mdata[4][4]){ End(true); tASSERT(sizeof(REAL) == sizeof(GLfloat)); - REAL * mdat=&mdata[0][0]; + REAL * mdat=&mdata[0][0]; glMultMatrixf(reinterpret_cast<GLfloat *>(mdat)); }; Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -121,9 +121,9 @@ SDL_version const & sdlVersion = *SDL_Linked_Version(); return - sdlVersion.major > 1 || sdlVersion.major == 1 && - ( sdlVersion.minor > 2 || sdlVersion.minor == 2 && - ( sdlVersion.patch >= 10 ) ); + sdlVersion.major > 1 || sdlVersion.major == 1 && + ( sdlVersion.minor > 2 || sdlVersion.minor == 2 && + ( sdlVersion.patch >= 10 ) ); #else return false; #endif Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -715,7 +715,7 @@ #pragma warning ( disable : 4286 ) // GRR. Visual C++ dones not handle generic exceptions with the above general statement. // A specialized version is needed. The best part: it warns about the code below being redundant. - catch ( tException const & e ) + catch ( tGenericException const & e ) { try { Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gFloor.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gFloor.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gFloor.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -176,7 +176,7 @@ TexMatrix(); glLoadMatrixf(&tm[0][0]); - glScalef((REAL)sr_screenWidth/sr_screenHeight/4. * 3., 1., 1.); + glScalef((REAL)sr_screenWidth/sr_screenHeight/4. * 3., 1., 1.); BeginQuads(); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -2725,10 +2725,10 @@ if (!mapFD || !aParser->LoadAndValidateMapXML("", mapFD, mapfile)) { - if (mapFD) - fclose(mapFD); + if (mapFD) + fclose(mapFD); - tOutput errorMessage( sn_GetNetState() == nCLIENT ? "$map_file_load_failure_server" : "$map_file_load_failure_self", mapfile ); + tOutput errorMessage( sn_GetNetState() == nCLIENT ? "$map_file_load_failure_server" : "$map_file_load_failure_self", mapfile ); #ifndef DEDICATED errorMessage << "\nLog:\n" << consoleLog.message_; @@ -2745,8 +2745,8 @@ mapFD = tResourceManager::openResource("", DEFAULT_MAP); if (!mapFD || !aParser->LoadAndValidateMapXML("", mapFD, DEFAULT_MAP)) { - if (mapFD) - fclose(mapFD); + if (mapFD) + fclose(mapFD); errorMessage << "$map_file_load_failure_default"; throw tGenericException( errorMessage, errorTitle ); } Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-14 12:40:11 UTC (rev 7395) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-14 12:48:55 UTC (rev 7396) @@ -238,7 +238,7 @@ { // add custom resolution NewChoice( ArmageTron_Custom ); - + // add desktop resolution if ( sr_DesktopScreensizeSupported() && !addFixed ) NewChoice( ArmageTron_Desktop ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-10 10:33:31
|
Revision: 7406 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7406&view=rev Author: z-man Date: 2007-12-10 02:32:53 -0800 (Mon, 10 Dec 2007) Log Message: ----------- More elaborate version of the last fix that does not break the master server. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/master.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10203 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10209 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/master.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/master.cpp 2007-12-10 09:42:12 UTC (rev 7405) +++ armagetronad/branches/0.2.8/armagetronad/src/network/master.cpp 2007-12-10 10:32:53 UTC (rev 7406) @@ -47,8 +47,6 @@ REAL master_idle = 2; static tSettingItem< REAL > mi( "MASTER_IDLE", master_idle ); -extern void sn_ReceiveFromControlSocket(); - // console with filter for better machine readable log format class nConsoleDateFilter:public tConsoleFilter{ private: Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-10 09:42:12 UTC (rev 7405) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-10 10:32:53 UTC (rev 7406) @@ -2277,12 +2277,26 @@ } } +// receives and processes data from control socket void sn_ReceiveFromControlSocket() { rec_peer(0); } +// discards data from control socket +void sn_DiscardFromControlSocket() +{ + // new facts: pending incoming data on the control socket causes the idle loops + // to use 100% CPU time, we need to fetch and discard the data instead of ignoring it. + if ( sn_Connections[0].socket ) + { + int8 buff[2]; + nAddress addrFrom; + sn_Connections[0].socket->Read( reinterpret_cast<int8 *>(buff),0, addrFrom); + } +} + nNetState sn_GetNetState(){ return current_state; } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2007-12-10 09:42:12 UTC (rev 7405) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2007-12-10 10:32:53 UTC (rev 7406) @@ -586,6 +586,12 @@ // process the messages from all hosts and send acks void sn_Receive(); +// receive and process data from control socket (used on master server to ping servers) +extern void sn_ReceiveFromControlSocket(); + +// receive and discard data from control socket (used on regular servers to keep the pipe clean) +extern void sn_DiscardFromControlSocket(); + // attempts to sync with server/all clients (<=> wait for all acks) // sync_netObjects: if set, network objects are synced as well // otherEnd: if set, the client instructs the server to send all packets and waits for completion. Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2007-12-10 09:42:12 UTC (rev 7405) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2007-12-10 10:32:53 UTC (rev 7406) @@ -1977,6 +1977,18 @@ } }; +// receive network data +void sg_Receive() +{ + sn_Receive(); + if ( sn_GetNetState() == nSERVER ) + { + // servers should ignore data sent to the control socket. It probably would be better + // to close the socket altogether, but that opens another can of worms. + sn_DiscardFromControlSocket(); + } +} + void ConnectToServer(nServerInfoBase *server) { tASSERT( server ); @@ -2052,7 +2064,7 @@ con << tOutput("$network_connecting_gamestate"); while (!sg_currentGame && tSysTimeFloat()<endTime && (sn_GetNetState() != nSTANDALONE)){ tAdvanceFrame(); - sn_Receive(); + sg_Receive(); nNetObject::SyncAll(); tAdvanceFrame(); sn_SendPlanned(); @@ -2260,7 +2272,7 @@ virtual void Do() //!< do the work. { tAdvanceFrame(); - sn_Receive(); + sg_Receive(); tAdvanceFrame(); sn_SendPlanned(); } @@ -2840,7 +2852,7 @@ if (!sr_glOut && ePlayer::PlayerConfig(0)->cam) tERR_ERROR_INT("Someone messed with the camera!"); #endif - sn_Receive(); + sg_Receive(); nNetObject::SyncAll(); tAdvanceFrame(); sn_SendPlanned(); @@ -4215,7 +4227,7 @@ void gameloop_idle() { se_UserShowScores( false ); - sn_Receive(); + sg_Receive(); nNetObject::SyncAll(); sn_SendPlanned(); GameLoop(false); @@ -4256,7 +4268,7 @@ { // new network data arrived, do the most urgent work now tAdvanceFrame(); - sn_Receive(); + sg_Receive(); se_SyncGameTimer(); REAL time=se_GameTime(); sg_currentGame->StateUpdate(); @@ -4276,7 +4288,7 @@ // do the regular simulation tAdvanceFrame(); - sn_Receive(); + sg_Receive(); goon=GameLoop(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-16 21:04:53
|
Revision: 7417 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7417&view=rev Author: z-man Date: 2007-12-16 13:04:50 -0800 (Sun, 16 Dec 2007) Log Message: ----------- Color code removal now reliably removes nested color codes. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10210 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10242 Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-12-16 20:17:27 UTC (rev 7416) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-12-16 21:04:50 UTC (rev 7417) @@ -2529,7 +2529,9 @@ { // filter colors if ( se_filterColorNames ) + { remoteName = tColoredString::RemoveColors( remoteName ); + } // don't do the fancy stuff on the client, it only makes names on score tables and // console messages go out of sync. Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2007-12-16 20:17:27 UTC (rev 7416) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2007-12-16 21:04:50 UTC (rev 7417) @@ -1080,17 +1080,21 @@ { tString ret; + bool removed = false; + // walk through string while (*c!='\0'){ // skip color codes if (*c=='0' && strlen(c)>=8 && c[1]=='x') { c+=8; + removed = true; } else ret << (*(c++)); } - return ret; + + return removed ? RemoveColors( ret ) : ret; } // helper function: removes trailing color of string and returns number of chars This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-31 17:19:42
|
Revision: 7435 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7435&view=rev Author: z-man Date: 2007-12-31 09:18:47 -0800 (Mon, 31 Dec 2007) Log Message: ----------- Fixed epsy's bug with MAX_PLAYERS_SAME_IP. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10317 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10319 Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-12-30 03:40:30 UTC (rev 7434) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-12-31 17:18:47 UTC (rev 7435) @@ -2164,6 +2164,10 @@ { // kill them sn_DisconnectUser( Owner(), "$network_kill_too_many_players" ); + + // technically has the same effect as the above function, but we also want + // to abort registering this player object and this exception will do that as well. + throw nKillHim(); } // clear old legacy spectator that may be lurking around Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.cpp 2007-12-30 03:40:30 UTC (rev 7434) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.cpp 2007-12-31 17:18:47 UTC (rev 7435) @@ -529,10 +529,15 @@ void Cheater(int i) { + // anything to do at all? + if (i != 0 && !sn_Connections[i].socket) + { + return; + } + con << "User " << i << " tried to cheat.\n"; // st_Breakpoint(); - if ( i == 0 ) // terminate connection to server throw tGenericException("There was a network error, the connection to the server had to be terminated.", "Network Error"); Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-30 03:40:30 UTC (rev 7434) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-31 17:18:47 UTC (rev 7435) @@ -3005,6 +3005,12 @@ return; } + // anything to do at all? + if (!sn_Connections[i].socket) + { + return; + } + sn_DisconnectUserNoWarn( i, reason ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-01 16:12:09
|
Revision: 7437 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7437&view=rev Author: z-man Date: 2008-01-01 08:12:14 -0800 (Tue, 01 Jan 2008) Log Message: ----------- strnlen does not exist on the mac, removed its usage Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h 2008-01-01 15:44:38 UTC (rev 7436) +++ armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h 2008-01-01 16:12:14 UTC (rev 7437) @@ -163,7 +163,7 @@ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION @version@ +#define VERSION "SVN" /* Windows 9x/NT/2k/XP */ /* #undef WIN32 */ Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2008-01-01 15:44:38 UTC (rev 7436) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2008-01-01 16:12:14 UTC (rev 7437) @@ -1080,17 +1080,19 @@ { tString ret; + int len = strlen(c); + bool removed = false; // walk through string while (*c!='\0'){ // skip color codes - int len; - if (*c=='0' && (len = strnlen(c,8))>=2 && c[1]=='x') + if (*c=='0' && len >= 2 && c[1]=='x') { if(len >= 8) { - c+=8; + c += 8; + len -= 8; removed = true; } else @@ -1100,7 +1102,10 @@ } } else + { ret << (*(c++)); + len--; + } } return removed ? RemoveColors( ret ) : ret; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-16 10:28:10
|
Revision: 7524 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7524&view=rev Author: z-man Date: 2008-01-16 02:28:09 -0800 (Wed, 16 Jan 2008) Log Message: ----------- Rebeautified. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gParser.cpp armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-01-16 10:27:25 UTC (rev 7523) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-01-16 10:28:09 UTC (rev 7524) @@ -756,7 +756,7 @@ return; } - con << tOutput( "$config_rinclude_not_found", file ); + con << tOutput( "$config_rinclude_not_found", file ); } static tConfItemFunc s_RInclude("RINCLUDE", &RInclude); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-16 10:27:25 UTC (rev 7523) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-16 10:28:09 UTC (rev 7524) @@ -2132,7 +2132,7 @@ REAL redirections = 0; double lastTime = tSysTimeFloat(); - + // check for redirection while( true ) { Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gParser.cpp 2008-01-16 10:27:25 UTC (rev 7523) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gParser.cpp 2008-01-16 10:28:09 UTC (rev 7524) @@ -54,7 +54,7 @@ //! auto_ptrish assignment operator gXMLCharReturn & operator = ( gXMLCharReturn & other ){ string_ = other.Release(); return *this; } - + //! conversion to char * operator char * () const{ return reinterpret_cast< char * >( string_ ); } Modified: armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-16 10:27:25 UTC (rev 7523) +++ armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-16 10:28:09 UTC (rev 7524) @@ -355,13 +355,13 @@ switch (event.key.keysym.sym){ case(SDLK_ESCAPE): - repeat = false; + repeat = false; lastkey=tSysTimeFloat(); Exit(); break; case(SDLK_UP): - lastkey=tSysTimeFloat(); + lastkey=tSysTimeFloat(); selected++; if (selected>=items.Len()) if (wrap) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-16 11:11:37
|
Revision: 7526 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7526&view=rev Author: z-man Date: 2008-01-16 03:11:39 -0800 (Wed, 16 Jan 2008) Log Message: ----------- Crashfix for the server browser. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-16 10:43:55 UTC (rev 7525) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-16 11:11:39 UTC (rev 7526) @@ -94,6 +94,8 @@ int sortKey_; public: + virtual void OnRender(); + void Update(); // sort the server view by score gServerMenu(const char *title); ~gServerMenu(); @@ -301,7 +303,20 @@ uMenu::HandleEvent( event ); } +void gServerMenu::OnRender() +{ + uMenu::OnRender(); + // next time the server list is to be resorted + static double sg_serverMenuRefreshTimeout=-1E+32f; + + if (sg_serverMenuRefreshTimeout < tSysTimeFloat()) + { + Update(); + sg_serverMenuRefreshTimeout = tSysTimeFloat()+2.0f; + } +} + void gServerMenu::Update() { // get currently selected server @@ -344,7 +359,7 @@ ReverseItems(); // set cursor to currently selected server - if ( info ) + if ( info && info->menuItem ) { selected = info->menuItem->GetID(); } @@ -718,14 +733,6 @@ sn_SendPlanned(); } - static double timeout=-1E+32f; - - if (timeout < tSysTimeFloat()) - { - (static_cast<gServerMenu*>(menu))->Update(); - timeout = tSysTimeFloat()+2.0f; - } - #ifndef DEDICATED rTextField::SetDefaultColor( tColor(.8,.3,.3,1) ); Modified: armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-16 10:43:55 UTC (rev 7525) +++ armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-16 11:11:39 UTC (rev 7526) @@ -64,7 +64,7 @@ menuTop=.7; menuBot=-.7; yOffset=0; - selected = -1; + selected = 10000000; } #endif @@ -75,7 +75,7 @@ menuTop=.7; menuBot=-.7; yOffset=0; - selected = -1; + selected = 100000000; } uMenu::~uMenu(){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-17 19:43:37
|
Revision: 7535 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7535&view=rev Author: z-man Date: 2008-01-17 11:40:00 -0800 (Thu, 17 Jan 2008) Log Message: ----------- The yearly game of eliminating all warnings a new version of GCC brings, this time version 4.2.2 Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.h armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.h armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.h armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h armagetronad/branches/0.2.8/armagetronad/src/tools/tMemManager.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp armagetronad/branches/0.2.8/armagetronad/src/ui/uInput.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -503,7 +503,7 @@ #ifndef DEDICATED -static char *default_instant_chat[]= +static char const * default_instant_chat[]= {"/team \\", "/msg \\", "/me \\", Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h 2008-01-17 19:40:00 UTC (rev 7535) @@ -77,7 +77,7 @@ bool nextSyncAck:1; // should the next sync message wait // for it's ack? bool syncReq:1; // should a sync message be sent? - int acksPending:4; // how many messages are underway? + unsigned int acksPending:4; // how many messages are underway? nKnowsAboutInfo(){ memset(this, 0, sizeof(nKnowsAboutInfo) ); Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -617,7 +617,8 @@ if (message->Descriptor()!=s_Acknowledge.ID()) sn_Connections[receiver].ackPending++; else - tASSERT(false); + tERR_ERROR("Should not wait for ack of an ack message itself."); + // sn_ackAckPending[receiver]++; #ifdef NET_DEBUG acks++; @@ -663,7 +664,9 @@ sn_Connections[receiver].ReliableMessageSent(); } else - tASSERT(false); + { + tERR_ERROR( "No message." ); + } // sn_ackAckPending[receiver]--; sn_pendingAcks.Remove(this,id); Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -768,7 +768,7 @@ int rTextureGroups::TextureMode[rTextureGroups::TEX_GROUPS]; -char *rTextureGroups::TextureGroupDescription[rTextureGroups::TEX_GROUPS]= +char const * rTextureGroups::TextureGroupDescription[rTextureGroups::TEX_GROUPS]= { "$texture_mode_0_help", "$texture_mode_1_help", Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.h 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rTexture.h 2008-01-17 19:40:00 UTC (rev 7535) @@ -49,7 +49,7 @@ }; static int TextureMode[TEX_GROUPS]; //!< the OpenGL texture modes for the groubs - static char *TextureGroupDescription[TEX_GROUPS]; //!< descriptions for the groups + static char const * TextureGroupDescription[TEX_GROUPS]; //!< descriptions for the groups }; //! wrapper for SDL surface Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -175,7 +175,7 @@ rViewportConfiguration *rViewportConfiguration::s_viewportConfigurations[]={ &single_vp,&two_vp,&two_b,&three_a,&three_b,&four_vp}; -char *rViewportConfiguration::s_viewportConfigurationNames[]= +char const * rViewportConfiguration::s_viewportConfigurationNames[]= {"$viewport_conf_name_0", "$viewport_conf_name_1", "$viewport_conf_name_2", Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.h 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rViewport.h 2008-01-17 19:40:00 UTC (rev 7535) @@ -93,7 +93,7 @@ static rViewportConfiguration *s_viewportConfigurations[]; static const int s_viewportNumConfigurations; - static char *s_viewportConfigurationNames[]; + static char const * s_viewportConfigurationNames[]; static rViewportConfiguration *CurrentViewportConfiguration(); Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -219,7 +219,7 @@ //! // ******************************************************************************************* -bool tCommandLineParser::GetSwitch( char const * option, char * option_short ) +bool tCommandLineParser::GetSwitch( char const * option, char const * option_short ) { if ( End() ) return false; @@ -248,7 +248,7 @@ //! // ******************************************************************************************* -bool tCommandLineParser::GetOption( tString & target, char const * option, char * option_short ) +bool tCommandLineParser::GetOption( tString & target, char const * option, char const * option_short ) { if ( End() ) return false; Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.h 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tCommandLine.h 2008-01-17 19:40:00 UTC (rev 7535) @@ -62,8 +62,8 @@ struct tCommandLineParser { public: - bool GetSwitch( char const * option, char * option_short=NULL ); //! Tests whether the current argument is the given switch - bool GetOption( tString & target, char const * option, char * option_short=NULL ); //! Tests whether the current argument is the given option and extracts the value + bool GetSwitch( char const * option, char const * option_short=NULL ); //! Tests whether the current argument is the given switch + bool GetOption( tString & target, char const * option, char const * option_short=NULL ); //! Tests whether the current argument is the given option and extracts the value bool End() const; //! Tests whether the command line parsing is done Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h 2008-01-17 19:40:00 UTC (rev 7535) @@ -40,7 +40,7 @@ #include <unistd.h> #endif -#define tVERIFY( x ) { if ( !( x ) ){ char* mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } +#define tVERIFY( x ) { if ( !( x ) ){ char const * mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } #ifdef DEBUG @@ -60,9 +60,9 @@ #define tERR_FLOW_LOW() if(st_debugValid(very_low,flow)) std::cout << std::setw(30) << __PRETTY_FUNCTION__ << '\n' -#define tASSERT( x ) { if ( !( x ) ){ char* mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } +#define tASSERT( x ) { if ( !( x ) ){ char const * mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } -#define tASSERT_EVAL( x ) { if ( !( x ) ){ char* mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } +#define tASSERT_EVAL( x ) { if ( !( x ) ){ char const * mess = "Assertion " #x " failed"; tERR_ERROR_INT( mess ); } } #else /* DEBUG */ #define tERR_DUMP(level,stream,stuff) Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tMemManager.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tMemManager.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tMemManager.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -197,7 +197,7 @@ #endif -static char *leakname="leak.log"; +static char const *leakname="leak.log"; static bool checkleaks=true; static const char *fileName="XXX"; static const char *classname="XXX"; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gArmagetron.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -453,6 +453,35 @@ #endif } +class gAutoStringArray +{ +public: + ~gAutoStringArray() + { + for ( std::vector< char * >::iterator i = strings.begin(); i != strings.end(); ++i ) + { + free( *i ); + } + } + + char * Store( char const * s ) + { + char * ret = strdup( s ); + strings.push_back( ret ); + return ret; + } +private: + std::vector< char * > strings; // the stored raw C strings +}; + +// wrapper for putenv, taking care of the peculiarity that the argument +// is kept in use for the rest of the program's lifetime +void sg_PutEnv( char const * s ) +{ + static gAutoStringArray store; + putenv( store.Store( s ) ); +} + int main(int argc,char **argv){ //std::cout << "enter\n"; // net_test(); @@ -571,14 +600,14 @@ #ifdef linux // Sam 5/23 - Don't ever use DGA, we don't need it for this game. if ( ! getenv("SDL_VIDEO_X11_DGAMOUSE") ) { - putenv("SDL_VIDEO_X11_DGAMOUSE=0"); + sg_PutEnv( "SDL_VIDEO_X11_DGAMOUSE=0" ); } #endif #ifdef WIN32 // disable DirectX by default; it causes problems with some boards. - if (!use_directx && !getenv("SDL_VIDEODRIVER") ) { - putenv("SDL_VIDEODRIVER=windib"); + if (!use_directx && !getenv( "SDL_VIDEODRIVER") ) { + sg_PutEnv( "SDL_VIDEODRIVER=windib" ); } #endif Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -153,7 +153,7 @@ static nSettingItemWatched<tString> conf_mapfile("MAP_FILE",mapfile, nConfItemVersionWatcher::Group_Breaking, 8 ); // bool globalingame=false; -tString sg_GetCurrentTime( char *szFormat ) +tString sg_GetCurrentTime( char const * szFormat ) { char szTemp[128]; time_t now; @@ -164,7 +164,7 @@ return tString(szTemp); } -void sg_PrintCurrentTime( char *szFormat ) +void sg_PrintCurrentTime( char const * szFormat ) { con << sg_GetCurrentTime(szFormat); } @@ -649,7 +649,7 @@ protected: tArray<tString> highName; - char* highscore_file; + char const * highscore_file; tOutput desc; int maxSize; @@ -759,7 +759,7 @@ return found; } - gHighscoresBase(char *name,char *sd,int max=0) + gHighscoresBase(char const * name,char const * sd,int max=0) :id(-1),highscore_file(name),desc(sd),maxSize(max){ highscoreList.Add(this,id); } @@ -966,7 +966,7 @@ } } - highscores(char *name,char *sd,int max=0) + highscores(char const * name,char const * sd,int max=0) :gHighscoresBase(name,sd,max){ // Load(); } @@ -1180,7 +1180,7 @@ } } - ladder(char *name,char *sd,int max=0) + ladder(char const * name,char const * sd,int max=0) :highscores<REAL>(name,sd,max){ // Load(); } @@ -2366,7 +2366,7 @@ "$network_menu_lan_help",&gServerBrowser::BrowseLAN); gNetIdler idler; - rSysDep::StartNetSyncThread( &idler ); + // rSysDep::StartNetSyncThread( &idler ); net_menu.Enter(); rSysDep::StopNetSyncThread(); #endif @@ -2482,7 +2482,7 @@ if (ingame) sg_IngameMenu = &MainMenu; - char *extitle,*exhelp; + char const * extitle,* exhelp; if (!ingame){ extitle="$main_menu_exit_text"; exhelp="$main_menu_exit_help"; @@ -2603,7 +2603,7 @@ uMenuItemSubmenu *gamemenuitem = NULL; if (sn_GetNetState() != nCLIENT) { - char *gamehelp; + char const * gamehelp; if (!ingame) gamehelp="$game_menu_main_help"; else Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -90,7 +90,7 @@ void NewChoice(uSelectItem<bool> *){}; void NewChoice(char *,bool ){}; public: - ArmageTron_feature_menuitem(uMenu *m,char *tit,const char *help,int &targ) + ArmageTron_feature_menuitem(uMenu *m,char const * tit,char const * help,int &targ) :uMenuItemSelection<int>(m,tit,help,targ){ uMenuItemSelection<int>::NewChoice( "$feature_disabled_text", @@ -114,7 +114,7 @@ void NewChoice(uSelectItem<bool> *){}; void NewChoice(char *,bool ){}; public: - ArmageTron_texmode_menuitem(uMenu *m,char *tit,int &targ, + ArmageTron_texmode_menuitem(uMenu *m,char const * tit,int &targ, bool font=false) :uMenuItemSelection<int> (m,tit,"$texture_menuitem_help",targ){ Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -843,7 +843,7 @@ return server; } -static char *sg_HelpText = "$network_master_browserhelp"; +static char const * sg_HelpText = "$network_master_browserhelp"; gServerMenuItem::gServerMenuItem(gServerMenu *men) :gBrowserMenuItem(men, sg_HelpText), server(NULL), lastPing_(-100), favorite_(false) Modified: armagetronad/branches/0.2.8/armagetronad/src/ui/uInput.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/ui/uInput.cpp 2008-01-17 18:59:20 UTC (rev 7534) +++ armagetronad/branches/0.2.8/armagetronad/src/ui/uInput.cpp 2008-01-17 19:40:00 UTC (rev 7535) @@ -344,7 +344,7 @@ // Menuitem for input selection // ***************************************************** -static char *keyname(int sym){ +static char const * keyname(int sym){ #ifndef DEDICATED if (sym<=SDLK_LAST) return SDL_GetKeyName(static_cast<SDLKey>(sym)); @@ -716,7 +716,7 @@ // Player binds // ***************** -static char *Player_keyword="PLAYER_BIND"; +static char const * Player_keyword="PLAYER_BIND"; uBindPlayer::uBindPlayer(uAction *a,int p):uBind(a),ePlayer(p){} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-18 11:07:16
|
Revision: 7537 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7537&view=rev Author: z-man Date: 2008-01-18 03:07:07 -0800 (Fri, 18 Jan 2008) Log Message: ----------- GCC 4.3 patches submitted by Fedora maintainer Jon Ciesla (li...@do...) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/md5.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nKrawall.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rModel.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tArray.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tCrypt.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tError.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h armagetronad/branches/0.2.8/armagetronad/src/tools/tRandom.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gAIBase.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/network/md5.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/md5.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/md5.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -78,6 +78,7 @@ #include <string> #include <memory> +#include <string.h> #ifdef TEST /* Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -35,6 +35,7 @@ #include <memory> #include <string> +#include <string.h> static nAuthentification::UserPasswordCallback* S_UserPasswordCallback = NULL; static nAuthentification::LoginResultCallback* S_LoginResultCallback = NULL; Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nConfig.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -30,6 +30,7 @@ #include "tConsole.h" #include "tSysTime.h" #include <set> +#include <string.h> nConfItemBase::nConfItemBase() :tConfItemBase(""), lastChangeTime_(-10000), lastChangeMessage_(0), watcher_(0){} Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nKrawall.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nKrawall.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nKrawall.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -44,6 +44,7 @@ #include <stdlib.h> #include <string> +#include <string.h> bool nKrawall::MayRequirePassword(tString& adress, unsigned int port) { Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetObject.h 2008-01-18 11:07:07 UTC (rev 7537) @@ -31,6 +31,7 @@ #include "nNetwork.h" #include "tArray.h" #include "tConsole.h" +#include <string.h> class nObserver; Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -41,6 +41,7 @@ #include <stdlib.h> #include <fstream> #include "tMath.h" +#include <string.h> #ifndef WIN32 #include <netinet/in.h> Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -38,6 +38,7 @@ #include <string> #include <stdio.h> +#include <string.h> #include <sys/types.h> Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rModel.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rModel.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rModel.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -35,8 +35,8 @@ #include "tConfiguration.h" #include "tLocale.h" #include "rGL.h" +#include <string.h> - static rModel *sr_ModelAnchor; static tConfItem<bool> mod_udl("USE_DISPLAYLISTS", sr_useDisplayLists); Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tArray.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tArray.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tArray.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -33,6 +33,7 @@ #include <stdlib.h> #include <string> #include "tArray.h" +#include <string.h> void GrowingArrayBase::ComplainIfFull(){ if (Len()>0) Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -43,6 +43,7 @@ #include "tResourceManager.h" #include <vector> +#include <string.h> /*********************************************************************** * The new Configuration interface, currently not completely implemented Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tCrypt.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tCrypt.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tCrypt.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -29,6 +29,7 @@ #include "tMemManager.h" #include <string> +#include <string.h> class tCryptDummy: public tCrypt { Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tError.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tError.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tError.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -27,6 +27,8 @@ #include "config.h" #include <iostream> +#include <string.h> +#include <cstdlib> #if HAVE_UNISTD_H #include <unistd.h> #endif Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tError.h 2008-01-18 11:07:07 UTC (rev 7537) @@ -36,6 +36,7 @@ #include <sstream> #include <iosfwd> #include <string> +#include <string.h> #if HAVE_UNISTD_H #include <unistd.h> #endif Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tRandom.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tRandom.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tRandom.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -36,6 +36,7 @@ #include "tError.h" #include "tRecorder.h" +#include <cstdlib> #undef INLINE_DEF #define INLINE_DEF Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gAIBase.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gAIBase.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gAIBase.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -43,6 +43,8 @@ #include "tRandom.h" #include "tRecorder.h" #include <stdlib.h> +#include <cstdlib> +#include <memory> #define AI_REACTION 0 #define AI_EMERGENCY 1 Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-17 20:34:06 UTC (rev 7536) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-18 11:07:07 UTC (rev 7537) @@ -53,6 +53,7 @@ #include "tMath.h" #include <stdlib.h> #include <fstream> +#include <memory> #ifndef DEDICATED #define DONTDOIT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-29 20:55:40
|
Revision: 7702 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7702&view=rev Author: z-man Date: 2008-01-29 12:55:45 -0800 (Tue, 29 Jan 2008) Log Message: ----------- Aplied yet another GCC 4.3 patch, and this time, put all of the includes we keep forgetting into defs.h. They should be removed at a later time again. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/defs.h armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h armagetronad/branches/0.2.8/armagetronad/src/tron/gFriends.h Modified: armagetronad/branches/0.2.8/armagetronad/src/defs.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/defs.h 2008-01-29 18:18:27 UTC (rev 7701) +++ armagetronad/branches/0.2.8/armagetronad/src/defs.h 2008-01-29 20:55:45 UTC (rev 7702) @@ -39,6 +39,15 @@ #include <math.h> #include <iosfwd> +// Includes required for GCC 4.3 only. Remove them as soon as some of +// us developers have GCC 4.3, then it is of course better to only put them +// where they are needed. +#include <string.h> +#include <memory> +#include <typeinfo> +#include <cstdlib> +// end of GCC 4.3 includes + // maximum number of supported viewports #ifndef MAX_VIEWERS #define MAX_VIEWERS 4 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-01-29 18:18:27 UTC (rev 7701) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-01-29 20:55:45 UTC (rev 7702) @@ -36,6 +36,7 @@ #include "nObserver.h" //#include "tCrypt.h" #include "tException.h" +#include <memory> class nSocket; class nAddress; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gFriends.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gFriends.h 2008-01-29 18:18:27 UTC (rev 7701) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gFriends.h 2008-01-29 20:55:45 UTC (rev 7702) @@ -28,6 +28,7 @@ #include "tString.h" #include "tList.h" #include "tConfiguration.h" +#include <memory> #define MAX_FRIENDS 10 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-02-04 20:06:55
|
Revision: 7731 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7731&view=rev Author: z-man Date: 2008-02-04 12:06:55 -0800 (Mon, 04 Feb 2008) Log Message: ----------- Authentification -> Authentication here, too, so nobody laughs at Z-Man ze German. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/Makefile.am armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp Added Paths: ----------- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.h Removed Paths: ------------- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.h Modified: armagetronad/branches/0.2.8/armagetronad/src/Makefile.am =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-02-04 19:59:45 UTC (rev 7730) +++ armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-02-04 20:06:55 UTC (rev 7731) @@ -66,8 +66,8 @@ tools/tMemManager.cpp tools/tMemManager.h #tools/tCommandLine.cpp tools/tCommandLine.h -libnetwork_a_SOURCES=network/md5.cpp network/md5.h network/nAuthentification.cpp\ - network/nAuthentification.h network/nConfig.cpp network/nConfig.h\ +libnetwork_a_SOURCES=network/md5.cpp network/md5.h network/nAuthentication.cpp\ + network/nAuthentication.h network/nConfig.cpp network/nConfig.h\ network/nKrawall.cpp network/nKrawall.h network/nKrawallPrivate.cpp\ network/nNetObject.cpp network/nNetObject.h network/nNetwork.cpp network/nNetwork.h\ network/nObserver.cpp network/nObserver.h network/nPriorizing.cpp network/nPriorizing.h\ Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 19:59:45 UTC (rev 7730) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 20:06:55 UTC (rev 7731) @@ -43,7 +43,7 @@ #include <deque> #include "rRender.h" #include "rSysdep.h" -#include "nAuthentification.h" +#include "nAuthentication.h" #include "tDirectories.h" #include "eTeam.h" #include "eVoter.h" @@ -788,7 +788,7 @@ // redo automatic logins immedeately if ( result.automatic ) { - nAuthentification::RequestLogin( authority ,username , *player, "$login_request_failed" ); + nAuthentication::RequestLogin( authority ,username , *player, "$login_request_failed" ); } } } @@ -971,9 +971,9 @@ } ePlayer::ePlayer(){ - nAuthentification::SetUserPasswordCallback(&PasswordCallback); + nAuthentication::SetUserPasswordCallback(&PasswordCallback); #ifdef KRAWALL_SERVER - nAuthentification::SetLoginResultCallback (&ResultCallback); + nAuthentication::SetLoginResultCallback (&ResultCallback); #endif nameTeamAfterMe = false; @@ -1257,10 +1257,10 @@ } p->loginWanted = - !nAuthentification::RequestLogin( authority, - userName, - *p, - authority.Len() > 1 ? tOutput( "$login_request", authority ) : tOutput( "$login_request_local" ) ); + !nAuthentication::RequestLogin( authority, + userName, + *p, + authority.Len() > 1 ? tOutput( "$login_request", authority ) : tOutput( "$login_request_local" ) ); #endif } } Copied: armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.cpp (from rev 7730, armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp) =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.cpp (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.cpp 2008-02-04 20:06:55 UTC (rev 7731) @@ -0,0 +1,1029 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2000 Manuel Moos (ma...@mo...) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*************************************************************************** + +*/ + +#include "nAuthentication.h" +#include "tMemManager.h" +#include "tToDo.h" +#include "tLocale.h" +#include "tRecorder.h" +#include "tSysTime.h" + +#include "nNetwork.h" +#include "nNetObject.h" +#include "nSocket.h" + +#include <memory> +#include <string> +#include <string.h> +#include <deque> + +#ifdef HAVE_LIBZTHREAD +#include <zthread/Thread.h> +#include <zthread/LockedQueue.h> +//#include <zthread/ClassLockable.h> +#include <zthread/FastMutex.h> +#include <zthread/FastRecursiveMutex.h> +#include <zthread/Guard.h> +#include <zthread/SynchronousExecutor.h> +#include <zthread/ThreadedExecutor.h> +typedef ZThread::ThreadedExecutor nExecutor; +//typedef ZThread::SynchronousExecutor nExecutor; +typedef ZThread::FastMutex nMutex; +#else +typedef tNonMutex nMutex; +#endif + +// authority black and whitelists +static tString sn_AuthorityBlacklist, sn_AuthorityWhitelist; +tConfItemLine sn_AuthorityBlacklistConf( "AUTHORITY_BLACKLIST", sn_AuthorityBlacklist ); +tConfItemLine sn_AuthorityWhitelistConf( "AUTHORITY_WHITELIST", sn_AuthorityWhitelist ); + +#ifdef DEBUG +// list of authorities that get accepted as valid authorities, no questions asked +static tString sn_AuthorityNoCheck; +tConfItemLine sn_AuthorityNoCheckConf( "AUTHORITY_NO_CHECK", sn_AuthorityNoCheck ); +#endif + +static nAuthentication::UserPasswordCallback* S_UserPasswordCallback = NULL; +static nAuthentication::LoginResultCallback* S_LoginResultCallback = NULL; + +// let the game register the callbacks +void nAuthentication::SetUserPasswordCallback(nAuthentication::UserPasswordCallback* callback) +{ + S_UserPasswordCallback = callback; +} + +void nAuthentication::SetLoginResultCallback (nAuthentication::LoginResultCallback* callback) +{ + S_LoginResultCallback = callback; +} + +// network handler declarations + +static nDescriptor nPasswordRequest(40, &nAuthentication::HandlePasswordRequest, "password_request"); + +static nDescriptor nPasswordAnswer(41, &nAuthentication::HandlePasswordAnswer, "password_answer"); + +// password request and answer +static nKrawall::nPasswordRequest sn_request; +static nKrawall::nPasswordAnswer sn_answer; +static nKrawall::nSalt sn_salt; +static int s_inUse = false; + +// finish the request for username and password +static void FinishHandlePasswordRequest() +{ + nKrawall::nScrambledPassword egg; + + // if the callback exists, get the scrambled password of the wanted user + if (S_UserPasswordCallback) + (*S_UserPasswordCallback)( sn_request, sn_answer ); + + // scramble the salt with the server address + sn_GetAdr( 0, sn_answer.serverAddress ); + sn_request.ScrambleSalt( sn_salt, sn_answer.serverAddress ); + + // scramble it with the given salt + sn_request.ScrambleWithSalt( nKrawall::nScrambleInfo(sn_answer.username), sn_answer.scrambled, sn_salt, egg); + + // destroy the original password + sn_answer.scrambled.Clear(); + + // and send it back + nMessage *ret = tNEW(nMessage)(nPasswordAnswer); + nKrawall::WriteScrambledPassword(egg, *ret); + *ret << sn_answer.username; + *ret << sn_answer.aborted; + *ret << sn_answer.automatic; + *ret << sn_answer.serverAddress; + ret->Send(0); + + s_inUse = false; +} + +// receive a password request +void nAuthentication::HandlePasswordRequest(nMessage& m) +{ + if (m.SenderID() > 0 || sn_GetNetState() != nCLIENT) + Cheater(m.SenderID()); + + sn_answer = nKrawall::nPasswordAnswer(); + sn_request = nKrawall::nPasswordRequest(); + + // already in the process: return without answer + if ( s_inUse ) + return; + s_inUse = true; + + // read salt and username from the message + ReadSalt(m, sn_salt); + + // read the username as raw as sanely possible + m.ReadRaw(sn_answer.username); + sn_answer.username.NetFilter(); + + m >> sn_request.message; + if (!m.End()) + { + m >> sn_request.failureOnLastTry; + } + else + { + sn_request.failureOnLastTry = true; + } + if (!m.End()) + { + // read method, prefix and suffiox + m >> sn_request.method; + m.ReadRaw(sn_request.prefix); + m.ReadRaw(sn_request.suffix); + sn_request.prefix.NetFilter(); + sn_request.suffix.NetFilter(); + } + else + { + // clear them + sn_request.method = "bmd5"; + sn_request.prefix = ""; + sn_request.suffix = ""; + } + + // postpone the answer for a better opportunity since it + // most likely involves opening a menu and waiting a while (and we + // are right now in the process of fetching network messages...) + st_ToDo(&FinishHandlePasswordRequest); +} + +#ifdef KRAWALL_SERVER + +static int sn_UserID( nNetObject * o ) +{ + if ( !o ) + { + return -1; + } + return o->Owner(); +} + +class nLoginProcess; + +//! persistent information between login processes +class nLoginPersistence: + public nMachineDecorator +{ + friend class nLoginProcess; + + nLoginPersistence( int userID ) + : nMachineDecorator( nMachine::GetMachine( userID ) ), + userAuthFailedLastTime( false ) + { + } + + static nLoginPersistence & Find( int userID ) + { + nMachine & machine = nMachine::GetMachine( userID ); + nLoginPersistence * ret = machine.GetDecorator< nLoginPersistence >(); + if ( !ret ) + { + ret = new nLoginPersistence( userID ); + } + + return *ret; + } + + virtual void OnDestroy() + { + delete this; + } + + bool userAuthFailedLastTime; +}; + +//! template that runs void member functions of reference countable objects +template< class T > class nMemberFunctionRunnerTemplate +#ifdef HAVE_LIBZTHREAD + : public ZThread::Runnable +#endif +{ +public: + nMemberFunctionRunnerTemplate( T & object, void (T::*function)() ) + : object_( &object ), function_( function ) + { + } + + // runs the function + void run() + { + (object_->*function_)(); + } + + //! schedule a task for execution at the next convenient break, between game rounds for example + static void ScheduleBreak( T & object, void (T::*function)() ) + { + pendingForBreak_.push_back( nMemberFunctionRunnerTemplate( object, function ) ); + } + + //! schedule a task for execution in a background thread + static void ScheduleBackground( T & object, void (T::*function)() ) + { +#ifdef HAVE_LIBZTHREAD + // schedule the task into a background thread + static nExecutor executor; + if ( !tRecorder::IsRunning() ) + { + executor.execute( ZThread::Task( new nMemberFunctionRunnerTemplate( object, function ) ) ); + } + else + { + // don't start threads when we're recording, just do the task at the next opportunity + ScheduleBreak( object, function ); + + } +#else + // do it when you can without getting interrupted. + ScheduleBreak( object, function ); +#endif + } + + //! schedule a task for execution in the next tToDo call + static void ScheduleForeground( T & object, void (T::*function)() ) + { +#ifdef HAVE_LIBZTHREAD + pending_.add( nMemberFunctionRunnerTemplate( object, function ) ); + st_ToDo( FinishAll ); +#else + // execute it immedeately + (object.*function)(); +#endif + + } + + // function that calls tasks scheduled for the next break + static void OnBreak() + { + // finish all pending tasks + while( pendingForBreak_.size() > 0 ) + { + nMemberFunctionRunnerTemplate & next = pendingForBreak_.front(); + next.run(); + pendingForBreak_.pop_front(); + } + } +private: + //! pointer to the object we should so something with + tJUST_CONTROLLED_PTR< T > object_; + + //! the function to call + void (T::*function_)(); + + // taks for the break + static std::deque< nMemberFunctionRunnerTemplate > pendingForBreak_; + +#ifdef HAVE_LIBZTHREAD + // queue of foreground tasks + static ZThread::LockedQueue< nMemberFunctionRunnerTemplate, ZThread::FastMutex > pending_; + + // function that calls them + static void FinishAll() + { + // finish all pending tasks + while( pending_.size() > 0 ) + { + nMemberFunctionRunnerTemplate next = pending_.next(); + next.run(); + } + } +#endif +}; + +template< class T > +std::deque< nMemberFunctionRunnerTemplate<T> > +nMemberFunctionRunnerTemplate<T>::pendingForBreak_; + +#ifdef HAVE_LIBZTHREAD +// static queue +template< class T > +ZThread::LockedQueue< nMemberFunctionRunnerTemplate<T>, ZThread::FastMutex > +nMemberFunctionRunnerTemplate<T>::pending_; +#endif + +// convenience wrapper +class nMemberFunctionRunner +{ +public: + enum ScheduleType + { + Break, + Foreground, + Background + }; + + template< class T > static void ScheduleBreak( T & object, void (T::*function)() ) + { + nMemberFunctionRunnerTemplate<T>::ScheduleBreak( object, function ); + } + + template< class T > static void ScheduleBackground( T & object, void (T::*function)() ) + { + nMemberFunctionRunnerTemplate<T>::ScheduleBackground( object, function ); + } + + template< class T > static void ScheduleForeground( T & object, void (T::*function)() ) + { + nMemberFunctionRunnerTemplate<T>::ScheduleForeground( object, function ); + } + + template< class T > static void ScheduleMayBlock( T & object, void (T::*function)(), bool block ) + { + if ( block ) + { +#ifdef HAVE_LIBZTHREAD + ScheduleBackground( object, function ); +#else + ScheduleBreak( object, function ); +#endif + } + else + { + ScheduleForeground( object, function ); + } + } +}; + + +//! manager for logon processes +class nLoginProcess: + public nMachineDecorator, + public nKrawall::nCheckResult, + public nKrawall::nPasswordCheckData, + public tReferencable< nLoginProcess, nMutex > +{ + // reference counting pointer + typedef tJUST_CONTROLLED_PTR< nLoginProcess > SelfPointer; +public: + nLoginProcess( int userID ) + : nMachineDecorator( nMachine::GetMachine( userID ) ) + { + // install self reference to keep this object alive + selfReference_ = this; + } + + ~nLoginProcess() + { + } + + static nLoginProcess * Find( int userID ) + { + nMachine & machine = nMachine::GetMachine( userID ); + return machine.GetDecorator< nLoginProcess >(); + } + + // OK, authentication goes in several steps. First, we initialize everything + void Init( tString const & authority, tString const & username, nNetObject & user, tString const & message ) + { + this->user = &user; + this->username = username; + this->message = message; + this->authority = authority; + + clientSupportedMethods = sn_Connections[user.Owner()].supportedAuthenticationMethods_; + + nMemberFunctionRunner::ScheduleMayBlock( *this, &nLoginProcess::FetchInfoFromAuthority, authority != "" ); + } + + // That function triggers fetching of authentication relevant data from the authentication + // server in this function which is supposed to run in the background: + void FetchInfoFromAuthority(); + + // report an authority info query error to the higher level system + bool ReportAuthorityError( tOutput const & error ) + { + // prepare failure report + this->success = false; + this->error = error; + + Abort(); + + return false; + } + + // that function again triggers the following foreground action that queries + // the credentials from the client. This object then goes to sleep, + // waiting for a client answer or logout, whichever comes first. + void QueryFromClient(); + + // authentication data received from the client is processed here: + void ProcessClientAnswer( nMessage & answer ); + + // sanity check the server address + bool CheckServerAddress( nMessage & m ); + + // and here we go again: a background task talks with the authority + // and determines whether the client is authorized or not. + void Authorize(); + + // which, when finished, triggers the foreground task of updating the + // game state and informing the client of the success of the operation. + void Finish(); + + // the finish task can also be triggered any time by this function: + void Abort(); +private: + // helper functions + + // fetches info from remote authority + bool FetchInfoFromAuthorityRemote(); + + // fetches info from local authority + bool FetchInfoFromAuthorityLocal(); + + tString message; //!< message to present to user + + + tString clientSupportedMethods; //!< methods supported by the client + + + // called when the machine gets destroyed, which happens a bit after + // the client logged out. If no process is currently running, destroy the object. + virtual void OnDestroy() + { + SelfPointer keepAlive( this ); + selfReference_ = 0; + } + + //! pointer to self to keep the object alive while the machine exists + SelfPointer selfReference_; +}; + + + +// That function triggers fetching of authentication relevant data from the authentication +// server in this function which is supposed to run in the background: +void nLoginProcess::FetchInfoFromAuthority() +{ + // set method to defaults + method.method = "bmd5"; + method.prefix = ""; + method.suffix = ""; + + bool ret; + if ( !tRecorder::IsPlayingBack() ) + { + if ( authority.Len() <= 1 ) + { + // local logins are easy, handle them first + ret = FetchInfoFromAuthorityLocal(); + } + else + { + // remote logins are harder. + ret = FetchInfoFromAuthorityRemote(); + } + } + + // record and playback result. + static char const * section = "AUTH_INFO"; + tRecorder::Playback( section, ret ); + tRecorder::Playback( section, method.method ); + tRecorder::Playback( section, authority ); + tRecorder::Record( section, ret ); + tRecorder::Record( section, method.method ); + tRecorder::Record( section, authority ); + + if ( !ret ) + { + return; + } + + // and go on + nMemberFunctionRunner::ScheduleForeground( *this, &nLoginProcess::QueryFromClient ); +} + +static bool sn_supportRemoteLogins = false; +static tSettingItem< bool > sn_supportRemoteLoginsConf( "GLOBAL_ID", sn_supportRemoteLogins ); + +// fetches info from remote authority +bool nLoginProcess::FetchInfoFromAuthorityRemote() +{ + if ( !sn_supportRemoteLogins ) + { + return ReportAuthorityError( tOutput("$login_error_noremote") ); + } + + { + // the hostname part of the authority should not contain uppercase letters +#ifdef DEBUG + if ( tIsInList( sn_AuthorityNoCheck, authority ) ) + { + fullAuthority = authority; + } + else +#endif + { + std::istringstream in( static_cast< const char * >( authority ) ); + std::ostringstream outShort; // stream for shorthand authority + std::ostringstream outFull; // stream for full authority URL that is to be used for lookups + int c = in.get(); + + // is the authority an abreviation? + bool shortcut = true; + + // is the server a raw IP? + bool rawIP = true; + + // which part we're currently parsing + bool inHostName = true; + bool inPort = false; + bool slash = false; + int port = 0; + + while( !in.eof() ) + { + if ( inHostName ) + { + // check validity of hostname part + if ( c == '.' ) + { + shortcut = false; + } + else if ( isalnum(c) ) + { + c = tolower(c); + if ( !isdigit( c ) ) + { + rawIP = false; + } + } + else if ( c == ':' ) + { + inPort = true; + inHostName = false; + } + else if ( c == '/' ) + { + shortcut = false; + slash = true; + inHostName = false; + } + else + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_hostname", authority ) ); + } + } + else if ( inPort ) + { + if ( c == '/' ) + { + shortcut = false; + inPort = false; + slash = true; + } + else if ( !isdigit( c ) ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_port", authority ) ); + } + else + { + port *= 10; + port += c - '0'; + } + } + else // must be in path + { + if ( c == '/' ) + { + if ( slash ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_slash", authority ) ); + } + + slash = true; + } + else + { + if (!isalnum(c) && c != '.' && c != '~' ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_path", authority ) ); + } + + slash = false; + } + } + + // shorthand authority must consist of lowercase letters only + outShort.put(tolower(c)); + + outFull.put(c); + + c = in.get(); + } + if ( slash ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_slash", authority ) ); + } + if ( port == 80 ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_defaultport", authority ) ); + } + + if ( rawIP ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_rawip", authority ) ); + } + + authority = outShort.str().c_str(); + fullAuthority = outFull.str().c_str(); + + static const char * def = ".authentication.armagetronad.net"; + + // append default authority path + if ( authority.Len() > 1 && shortcut ) + { + fullAuthority += def; + } + + // check if the pased authority contains the default ending + if ( !shortcut && authority.Reverse().StartsWith( tString( def ).Reverse() ) ) + { + // strip it + authority = authority.SubStr( 0, authority.Len() - strlen( def ) - 1 ); + shortcut = true; + } + } + + // check for authority in black and whitelist + if ( tIsInList( sn_AuthorityBlacklist, authority ) ) + { + return ReportAuthorityError( tOutput( "$login_error_blacklist", authority ) ); + } + + if ( sn_AuthorityWhitelist != "" && !tIsInList( sn_AuthorityWhitelist, authority ) ) + { + return ReportAuthorityError( tOutput( "$login_error_whitelist", authority ) ); + } + + // try yo find a better method, fetch method list + std::stringstream answer; + int rc = nKrawall::FetchURL( fullAuthority, "?query=methods", answer ); + + if ( rc == -1 ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_notfound", authority ) ); + } + + tString id; + answer >> id; + tToLower(id); + + tString methods; + std::ws(answer); + methods.ReadLine( answer ); + tToLower(methods); + + if ( rc != 200 || id != "methods" ) + { + return ReportAuthorityError( tOutput( "$login_error_nomethodlist", authority, rc, id + " " + methods ) ); + } + + + method.method = nKrawall::nMethod::BestMethod( + methods, + clientSupportedMethods + ); + + // check whether a method can be found + if ( method.method.Len() <= 1 ) + { + return ReportAuthorityError( + tOutput( "$login_error_nomethod", + clientSupportedMethods, + nKrawall::nMethod::SupportedMethods(), + methods ) + ); + } + } + + // fetch md5 prefix and suffix + { + std::ostringstream query; + query << "?query=params"; + query << "&method=" << nKrawall::EncodeString( method.method ); + std::ostringstream data; + int rc = nKrawall::FetchURL( fullAuthority, query.str().c_str(), data ); + + if ( rc != 200 ) + { + if ( rc == -1 ) + { + return ReportAuthorityError( tOutput( "$login_error_invalidurl_notfound", authority ) ); + } + + return ReportAuthorityError( tOutput( "$login_error_nomethodproperties", authority, rc, data.str().c_str() ) ); + } + + // read the properties + std::istringstream read( data.str() ); + method = nKrawall::nMethod( static_cast< char const * >( method.method ), read ); + } + + return true; +} + +// fetches info from local authority +bool nLoginProcess::FetchInfoFromAuthorityLocal() +{ + // try yo find a better method + if ( !nKrawall::nMethod::BestLocalMethod( + clientSupportedMethods, + method + ) + ) + { + return ReportAuthorityError( + tOutput( "$login_error_nomethod", + clientSupportedMethods, + nKrawall::nMethod::SupportedMethods(), + nKrawall::nMethod::SupportedMethods() ) + ); + } + + return true; +} + +// that function again triggers the following foreground action that queries +// the credentials from the client. This object then goes to sleep, +// waiting for a client answer or logout, whichever comes first. +void nLoginProcess::QueryFromClient() +{ + // check whether the user disappeared by now (this is run in the main thread, + // so no risk of the user disconnecting while the function runs) + int userID = sn_UserID( user ); + if ( userID <= 0 ) + return; + + // create a random salt value + nKrawall::RandomSalt(salt); + + // send the salt value and the username to the + nMessage *m = tNEW(nMessage)(::nPasswordRequest); + nKrawall::WriteSalt(salt, *m); + *m << username; + *m << static_cast<tString>(message); + *m << nLoginPersistence::Find( userID ).userAuthFailedLastTime; + + // write method info + *m << method.method; + *m << method.prefix; + *m << method.suffix; + + m->Send(userID); + + // well, then we wait for the answer. + con << tOutput( "$login_message_responded", userID, username, method.method, message ); +} + +// authentication data received from the client is processed here: +void nLoginProcess::ProcessClientAnswer( nMessage & m ) +{ + success = false; + + // read password and username from remote + nKrawall::ReadScrambledPassword(m, hash); + + m.ReadRaw(username); + username.NetFilter(); + + aborted = false; + automatic = false; + if ( !m.End() ) + { + m >> aborted; + } + if ( !m.End() ) + { + m >> automatic; + } + if (!m.End()) + { + // read the server address the client used for scrambling + m >> serverAddress; + + // sanity check it, of course :) + if ( !CheckServerAddress( m ) ) + { + // no use going on, the server address won't match, password checking will fail. + return; + } + } + else + { + serverAddress = sn_GetMyAddress(); + + if ( method.method != "bmd5" ) + { + con << "WARNING, client did not send the server address. Password checks may fail.\n"; + } + } + + // and go on + nMemberFunctionRunner::ScheduleMayBlock( *this, &nLoginProcess::Authorize, authority != "" ); +} + +static bool sn_trustLAN = false; +static tSettingItem< bool > sn_TrustLANConf( "TRUST_LAN", sn_trustLAN ); + +// sanity check the server address +bool nLoginProcess::CheckServerAddress( nMessage & m ) +{ + // check whether we can read our IP from the socket + nSocket const * socket = sn_Connections[m.SenderID()].socket; + if ( socket ) + { + tString compareAddress = socket->GetAddress().ToString(); + if ( !compareAddress.StartsWith("*") && compareAddress == serverAddress ) + { + // everything is fine, adresses match + return true; + } + } + + // check the incoming address, clients from the LAN should be safe + if ( sn_trustLAN ) + { + tString peerAddress; + sn_GetAdr( m.SenderID(), peerAddress ); + if ( sn_IsLANAddress( peerAddress ) && sn_IsLANAddress( serverAddress ) ) + { + return true; + } + } + + else if ( sn_GetMyAddress() == serverAddress ) + { + // all's well + return true; + } + + tString hisServerAddress = serverAddress; + serverAddress = sn_GetMyAddress(); + + // if we don't know our own address, + if ( sn_GetMyAddress().StartsWith("*") ) + { + // reject authentication. + return ReportAuthorityError( tOutput("$login_error_pharm", hisServerAddress, sn_GetMyAddress() ) ); + } + + // reject authentication. + return ReportAuthorityError( tOutput("$login_error_pharm", hisServerAddress, sn_GetMyAddress() ) ); +} + +// and here we go again: a background task talks with the authority +// and determines whether the client is authorized or not. +void nLoginProcess::Authorize() +{ + if ( aborted ) + { + success = false; + + error = tOutput("$login_error_aborted"); + } + else + { + if ( !tRecorder::IsPlayingBack() ) + { + nKrawall::CheckScrambledPassword( *this, *this ); + } + + // record and playback result (required because on playback, a new + // salt is generated and this way, a recoding does not contain ANY + // exploitable information for password theft: the scrambled password + // stored in the incoming network stream has an unknown salt value. ) + static char const * section = "AUTH_RESULT"; + tRecorder::Playback( section, success ); + tRecorder::Playback( section, authority ); + tRecorder::Record( section, success ); + tRecorder::Record( section, authority ); + } + + Abort(); +} + +// the finish task can also be triggered any time by this function: +void nLoginProcess::Abort() +{ + nMemberFunctionRunner::ScheduleForeground( *this, &nLoginProcess::Finish ); +} + +// which, when finished, triggers the foreground task of updating the +// game state and informing the client of the success of the operation. +void nLoginProcess::Finish() +{ + // again, userID is safe in this function + int userID = sn_UserID( user ); + if ( userID <= 0 ) + return; + + // decorate console with correct sender ID + nCurrentSenderID currentSender( userID ); + + // store success for next time + nLoginPersistence::Find( userID ).userAuthFailedLastTime = !success; + + // remove this decorator from public view + Remove(); + + if (S_LoginResultCallback) + (*S_LoginResultCallback)( *this ); + + // bye-bye! + Destroy(); +} + +static void sn_Reset(){ + int userID = nCallbackLoginLogout::User(); + + // kill/detach pending login process + nLoginProcess * process = nLoginProcess::Find( userID ); + if ( process ) + { + process->Remove(); + process->Destroy(); + } +} + +static nCallbackLoginLogout reset(&sn_Reset); + +#endif // KRAWALL_SERVER + +void nAuthentication::HandlePasswordAnswer(nMessage& m) +{ +#ifdef KRAWALL_SERVER + // find login pricess + nLoginProcess * process = nLoginProcess::Find( m.SenderID() ); + + // and delegate to it + if ( process ) + { + process->ProcessClientAnswer( m ); + } +#endif +} + +// on the server: request user authentification from login slot +bool nAuthentication::RequestLogin(const tString & authority, const tString& username, nNetObject & user, const tOutput& message ) +{ +#ifdef KRAWALL_SERVER + int userID = user.Owner(); + if ( userID <= 0 ) + { + return false; + } + + con << tOutput( "$login_message_requested", userID, username, authority ); + + // do nothing if there is another login in process for that client + if ( nLoginProcess::Find( userID ) ) + { + return false; + } + + // trigger function cascade bouncing between threads + (new nLoginProcess( userID ))->Init( authority, username, user, tString(message) ); +#endif + + return true; +} + +//! call when you have some time for lengthy authentication queries to servers +void nAuthentication::OnBreak() +{ +#ifdef KRAWALL_SERVER + nMemberFunctionRunnerTemplate< nLoginProcess >::OnBreak(); +#endif +} + Copied: armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.h (from rev 7730, armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.h) =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.h (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentication.h 2008-02-04 20:06:55 UTC (rev 7731) @@ -0,0 +1,60 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2000 Manuel Moos (ma...@mo...) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*************************************************************************** + +*/ + +#ifndef ArmageTron_AUTHENTIFICATION_H +#define ArmageTron_AUTHENTIFICATION_H + +#include "nKrawall.h" + +class tOutput; + +class nAuthentication: public nKrawall +{ +public: + //! callback where the game can register the password request/lookup + typedef void UserPasswordCallback( nPasswordRequest const & request, + nPasswordAnswer & answer ); + + //! callback where the game can register the login success + typedef void LoginResultCallback( nCheckResult const & result ); + + //! let the game register the callbacks + static void SetUserPasswordCallback(UserPasswordCallback* callback); + static void SetLoginResultCallback (LoginResultCallback* callback); + + //! network handlers + static void HandlePasswordRequest(nMessage& m); + static void HandlePasswordAnswer (nMessage& m); + + //! on the server: request user authentification from login slot + static bool RequestLogin(const tString& authority, const tString& username, nNetObject & user, const tOutput& message ); + + //! call when you have some time for lengthy authentication queries to servers + static void OnBreak(); +}; + +#endif Deleted: armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp 2008-02-04 19:59:45 UTC (rev 7730) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nAuthentification.cpp 2008-02-04 20:06:55 UTC (rev 7731) @@ -1,1029 +0,0 @@ -/* - -************************************************************************* - -ArmageTron -- Just another Tron Lightcycle Game in 3D. -Copyright (C) 2000 Manuel Moos (ma...@mo...) - -************************************************************************** - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*************************************************************************** - -*/ - -#include "nAuthentification.h" -#include "tMemManager.h" -#include "tToDo.h" -#include "tLocale.h" -#include "tRecorder.h" -#include "tSysTime.h" - -#include "nNetwork.h" -#include "nNetObject.h" -#include "nSocket.h" - -#include <memory> -#include <string> -#include <string.h> -#include <deque> - -#ifdef HAVE_LIBZTHREAD -#include <zthread/Thread.h> -#include <zthread/LockedQueue.h> -//#include <zthread/ClassLockable.h> -#include <zthread/FastMutex.h> -#include <zthread/FastRecursiveMutex.h> -#include <zthread/Guard.h> -#include <zthread/SynchronousExecutor.h> -#include <zthread/ThreadedExecutor.h> -typedef ZThread::ThreadedExecutor nExecutor; -//typedef ZThread::SynchronousExecutor nExecutor; -typedef ZThread::FastMutex nMutex; -#else -typedef tNonMutex nMutex; -#endif - -// authority black and whitelists -static tString sn_AuthorityBlacklist, sn_AuthorityWhitelist; -tConfItemLine sn_AuthorityBlacklistConf( "AUTHORITY_BLACKLIST", sn_AuthorityBlacklist ); -tConfItemLine sn_AuthorityWhitelistConf( "AUTHORITY_WHITELIST", sn_AuthorityWhitelist ); - -#ifdef DEBUG -// list of authorities that get accepted as valid authorities, no questions asked -static tString sn_AuthorityNoCheck; -tConfItemLine sn_AuthorityNoCheckConf( "AUTHORITY_NO_CHECK", sn_AuthorityNoCheck ); -#endif - -static nAuthentification::UserPasswordCallback* S_UserPasswordCallback = NULL; -static nAuthentification::LoginResultCallback* S_LoginResultCallback = NULL; - -// let the game register the callbacks -void nAuthentification::SetUserPasswordCallback(nAuthentification::UserPasswordCallback* callback) -{ - S_UserPasswordCallback = callback; -} - -void nAuthentification::SetLoginResultCallback (nAuthentification::LoginResultCallback* callback) -{ - S_LoginResultCallback = callback; -} - -// network handler declarations - -static nDescriptor nPasswordRequest(40, &nAuthentification::HandlePasswordRequest, "password_request"); - -static nDescriptor nPasswordAnswer(41, &nAuthentification::HandlePasswordAnswer, "password_answer"); - -// password request and answer -static nKrawall::nPasswordRequest sn_request; -static nKrawall::nPasswordAnswer sn_answer; -static nKrawall::nSalt sn_salt; -static int s_inUse = false; - -// finish the request for username and password -static void FinishHandlePasswordRequest() -{ - nKrawall::nScrambledPassword egg; - - // if the callback exists, get the scrambled password of the wanted user - if (S_UserPasswordCallback) - (*S_UserPasswordCallback)( sn_request, sn_answer ); - - // scramble the salt with the server address - sn_GetAdr( 0, sn_answer.serverAddress ); - sn_request.ScrambleSalt( sn_salt, sn_answer.serverAddress ); - - // scramble it with the given salt - sn_request.ScrambleWithSalt( nKrawall::nScrambleInfo(sn_answer.username), sn_answer.scrambled, sn_salt, egg); - - // destroy the original password - sn_answer.scrambled.Clear(); - - // and send it back - nMessage *ret = tNEW(nMessage)(nPasswordAnswer); - nKrawall::WriteScrambledPassword(egg, *ret); - *ret << sn_answer.username; - *ret << sn_answer.aborted; - *ret << sn_answer.automatic; - *ret << sn_answer.serverAddress; - ret->Send(0); - - s_inUse = false; -} - -// receive a password request -void nAuthentification::HandlePasswordRequest(nMessage& m) -{ - if (m.SenderID() > 0 || sn_GetNetState() != nCLIENT) - Cheater(m.SenderID()); - - sn_answer = nKrawall::nPasswordAnswer(); - sn_request = nKrawall::nPasswordRequest(); - - // already in the process: return without answer - if ( s_inUse ) - return; - s_inUse = true; - - // read salt and username from the message - ReadSalt(m, sn_salt); - - // read the username as raw as sanely possible - m.ReadRaw(sn_answer.username); - sn_answer.username.NetFilter(); - - m >> sn_request.message; - if (!m.End()) - { - m >> sn_request.failureOnLastTry; - } - else - { - sn_request.failureOnLastTry = true; - } - if (!m.End()) - { - // read method, prefix and suffiox - m >> sn_request.method; - m.ReadRaw(sn_request.prefix); - m.ReadRaw(sn_request.suffix); - sn_request.prefix.NetFilter(); - sn_request.suffix.NetFilter(); - } - else - { - // clear them - sn_request.method = "bmd5"; - sn_request.prefix = ""; - sn_request.suffix = ""; - } - - // postpone the answer for a better opportunity since it - // most likely involves opening a menu and waiting a while (and we - // are right now in the process of fetching network messages...) - st_ToDo(&FinishHandlePasswordRequest); -} - -#ifdef KRAWALL_SERVER - -static int sn_UserID( nNetObject * o ) -{ - if ( !o ) - { - return -1; - } - return o->Owner(); -} - -class nLoginProcess; - -//! persistent information between login processes -class nLoginPersistence: - public nMachineDecorator -{ - friend class nLoginProcess; - - nLoginPersistence( int userID ) - : nMachineDecorator( nMachine::GetMachine( userID ) ), - userAuthFailedLastTime( false ) - { - } - - static nLoginPersistence & Find( int userID ) - { - nMachine & machine = nMachine::GetMachine( userID ); - nLoginPersistence * ret = machine.GetDecorator< nLoginPersistence >(); - if ( !ret ) - { - ret = new nLoginPersistence( userID ); - } - - return *ret; - } - - virtual void OnDestroy() - { - delete this; - } - - bool userAuthFailedLastTime; -}; - -//! template that runs void member functions of reference countable objects -template< class T > class nMemberFunctionRunnerTemplate -#ifdef HAVE_LIBZTHREAD - : public ZThread::Runnable -#endif -{ -public: - nMemberFunctionRunnerTemplate( T & object, void (T::*function)() ) - : object_( &object ), function_( function ) - { - } - - // runs the function - void run() - { - (object_->*function_)(); - } - - //! schedule a task for execution at the next convenient break, between game rounds for example - static void ScheduleBreak( T & object, void (T::*function)() ) - { - pendingForBreak_.push_back( nMemberFunctionRunnerTemplate( object, function ) ); - } - - //! schedule a task for execution in a background thread - static void ScheduleBackground( T & object, void (T::*function)() ) - { -#ifdef HAVE_LIBZTHREAD - // schedule the task into a background thread - static nExecutor executor; - if ( !tRecorder::IsRunning() ) - { - executor.execute( ZThread::Task( new nMemberFunctionRunnerTemplate( object, function ) ) ); - } - else - { - // don't start threads when we're recording, just do the task at the next opportunity - ScheduleBreak( object, function ); - - } -#else - // do it when you can without getting interrupted. - ScheduleBreak( object, function ); -#endif - } - - //! schedule a task for execution in the next tToDo call - static void ScheduleForeground( T & object, void (T::*function)() ) - { -#ifdef HAVE_LIBZTHREAD - pending_.add( nMemberFunctionRunnerTemplate( object, function ) ); - st_ToDo( FinishAll ); -#else - // execute it immedeately - (object.*function)(); -#endif - - } - - // function that calls tasks scheduled for the next break - static void OnBreak() - { - // finish all pending tasks - while( pendingForBreak_.size() > 0 ) - { - nMemberFunctionRunnerTemplate & next = pendingForBreak_.front(); - next.run(); - pendingForBreak_.pop_front(); - } - } -private: - //! pointer to the object we should so something with - tJUST_CONTROLLED_PTR< T > object_; - - //! the function to call - void (T::*function_)(); - - // taks for the break - static std::deque< nMemberFunctionRunnerTemplate > pendingForBreak_; - -#ifdef HAVE_LIBZTHREAD - // queue of foreground tasks - static ZThread::LockedQueue< nMemberFunctionRunnerTemplate, ZThread::FastMutex > pending_; - - // function that calls them - static void FinishAll() - { - // finish all pending tasks - while( pending_.size() > 0 ) - { - nMemberFunctionRunnerTemplate next = pending_.next(); - next.run(); - } - } -#endif -}; - -template< class T > -std::deque< nMemberFunctionRunnerTemplate<T> > -nMemberFunctionRunnerTemplate<T>::pendingForBreak_; - -#ifdef HAVE_LIBZTHREAD -// static queue -template< class T > -ZThread::LockedQueue< nMemberFunctionRunnerTemplate<T>, ZThread::FastMutex > -nMemberFunctionRunnerTemplate<T>::pending_; -#endif - -// convenience wrapper -class nMemberFunctionRunner -{ -public: - enum ScheduleType - { - Break, - Foreground, - Background - }; - - template< class T > static void ScheduleBreak( T & object, void (T::*function)() ) - { - nMemberFunctionRunnerTemplate<T>::ScheduleBreak( object, function ); - } - - template< class T > static void ScheduleBackground( T & object, void (T::*function)() ) - { - nMemberFunctionRunnerTemplate<T>::ScheduleBackground( object, function ); - } - - template< class T > static void ScheduleForeground( T & object, void (T::*function)() ) - { - nMemberFunctionRunnerTemplate<T>::ScheduleForeground( object, function ); - } - - template< class T > static void ScheduleMayBlock( T & object, void (T::*function)(), bool block ) - { - if ( block ) - { -#ifdef HAVE_LIBZTHREAD - ScheduleBackground( object, function ); -#else - ScheduleBreak( object, function ); -#endif - } - else - { - ScheduleForeground( object, function ); - } - } -}; - - -//! manager for logon processes -class nLoginProcess: - public nMachineDecorator, - public nKrawall::nCheckResult, - public nKrawall::nPasswordCheckData, - public tReferencable< nLoginProcess, nMutex > -{ - // reference counting pointer - typedef tJUST_CONTROLLED_PTR< nLoginProcess > SelfPointer; -public: - nLoginProcess( int userID ) - : nMachineDecorator( nMachine::GetMachine( userID ) ) - { - // install self reference to keep this object alive - selfReference_ = this; - } - - ~nLoginProcess() - { - } - - static nLoginProcess * Find( int userID ) - { - nMachine & machine = nMachine::GetMachine( userID ); - return machine.GetDecorator< nLoginProcess >(); - } - - // OK, authentication goes in several steps. First, we initialize everything - void Init( tString const & authority, tString const & username, nNetObject & user, tString const & message ) - { - this->user = &user; - this->username = username; - this->message = message; - this->authority = authority; - - clientSupportedMethods = sn_Connections[user.Owner()].supportedAuthenticationMethods_; - - nMemberFunctionRunner::ScheduleMayBlock( *this, &nLoginProcess::FetchInfoFromAuthority, authority != "" ); - } - - // That function triggers fetching of authentication relevant data from the authentication - // server in this function which is supposed to run in the background: - void FetchInfoFromAuthority(); - - // report an authority info query error to the higher level system - bool ReportAuthorityError( tOutput const & error ) - { - // prepare failure report - this->success = false; - this->error = error; - - Abort(); - - return false; - } - - // that function again triggers the following foreground action that queries - // the credentials from the client. This object then goes to sleep, - // waiting for a client answer or logout, whichever comes first. - void QueryFromClient(); - - // authentication data received from the client is processed here: - void ProcessClientAnswer( nMessage & answer ); - - // sanity check the server address - bool CheckServerAddress( nMessage & m ); - - // and here we go again: a background task talks with the authority - // and determines whether the client is authorized or not. - void Authorize(); - - // which, when finished, triggers the foreground task of updating the - // game state and informing the client of the success of the operation. - void Finish(); - - // the finish task can also be triggered any time by this function: - void Abort(); -private: - // helper functions - - // fetches info from remote authority - bool FetchInfoFromAuthorityRemote(); - - // fetches info from local authority - bool FetchInfoFromAuthorityLocal(); - - tString message; //!< message to present to user - - - tString clientSupportedMethods; //!< methods supported by the client - - - // called when the machine gets destroyed, which happens a bit after - // the client logged out. If no process is currently running, destroy the object. - virtual void OnDestroy() - { - SelfPointer keepAlive( this ); - selfReference_ = 0; - } - - //! pointer to self to keep the object alive while the machine exists - SelfPointer selfReference_; -}; - - - -// That function triggers fetching of authentication relevant data from the authentication -// server in this function which is supposed to run in the background: -void nLoginProcess::FetchInfoFromAuthority() -{ - // set method to defaults - method.method = "bmd5"; - method.prefix = ""; - method.suffix = ""; - - bool ret; - if ( !tRecorder::IsPlayingBack() ) - { - if ( authority.Len() <= 1 ) - { - // local logins are easy, handle them first - ret = FetchInfoFromAuthorityLocal(); - } - else - { - // remote logins are harder. - ret = FetchInfoFromAuthorityRemote(); - } - } - - // record and playback result. - static char const * section = "AUTH_INFO"; - tRecorder::Playback( section, ret ); - tRecorder::Playback( section, method.method ); - tRecorder::Playback( section, authority ); - tRecorder::Record( section, ret ); - tRecorder::Record( section, method.method ); - tRecorder::Record( section, authority ); - - if ( !ret ) - { - return; - } - - // and go on - nMemberFunctionRunner::ScheduleForeground( *this, &nLoginProcess::QueryFromClient ); -} - -static bool sn_supportRemoteLogins = false; -static tSettingItem< bool > sn_supportRemoteLoginsConf( "GLOBAL_ID", sn_supportRemoteLogins ); - -// fetches info from remote authority -bool nLoginProcess::FetchInfoFromAuthorityRemote() -{ - if ( !sn_supportRemoteLogins ) - { - return ReportAuthorityError( tOutput("$login_error_noremote") ); - } - - { - // the hostname part of the authority should not contain uppercase letters -#ifdef DEBUG - if ( tIsInList( sn_AuthorityNoCheck, authority ) ) - { - fullAuthority = authority; - } - else -#endif - { - std::istringstream in( static_cast< const char * >( authority ) ); - std::ostringstream outShort; // stream for shorthand authority - std::ostringstream outFull; // stream for full authority URL that is to be used for lookups - int c = in.get(); - - // is the authority an abreviation? - bool shortcut = true; - - // is the server a raw IP? - bool rawIP = true; - - // which part we're currently parsing - bool inHostName = true; - bool inPort = false; - bool slash = false; - int port = 0; - - while( !in.eof() ) - { - if ( inHostName ) - { - // check validity of hostname part - if ( c == '.' ) - { - shortcut = false; - } - else if ( isalnum(c) ) - { - c = tolower(c); - if ( !isdigit( c ) ) - { - rawIP = false; - } - } - else if ( c == ':' ) - { - inPort = true; - inHostName = false; - } - else if ( c == '/' ) - { - shortcut = false; - slash = true; - inHostName = false; - } - else - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_hostname", authority ) ); - } - } - else if ( inPort ) - { - if ( c == '/' ) - { - shortcut = false; - inPort = false; - slash = true; - } - else if ( !isdigit( c ) ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_port", authority ) ); - } - else - { - port *= 10; - port += c - '0'; - } - } - else // must be in path - { - if ( c == '/' ) - { - if ( slash ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_slash", authority ) ); - } - - slash = true; - } - else - { - if (!isalnum(c) && c != '.' && c != '~' ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_illegal_path", authority ) ); - } - - slash = false; - } - } - - // shorthand authority must consist of lowercase letters only - outShort.put(tolower(c)); - - outFull.put(c); - - c = in.get(); - } - if ( slash ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_slash", authority ) ); - } - if ( port == 80 ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_defaultport", authority ) ); - } - - if ( rawIP ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_rawip", authority ) ); - } - - authority = outShort.str().c_str(); - fullAuthority = outFull.str().c_str(); - - static const char * def = ".authentication.armagetronad.net"; - - // append default authority path - if ( authority.Len() > 1 && shortcut ) - { - fullAuthority += def; - } - - // check if the pased authority contains the default ending - if ( !shortcut && authority.Reverse().StartsWith( tString( def ).Reverse() ) ) - { - // strip it - authority = authority.SubStr( 0, authority.Len() - strlen( def ) - 1 ); - shortcut = true; - } - } - - // check for authority in black and whitelist - if ( tIsInList( sn_AuthorityBlacklist, authority ) ) - { - return ReportAuthorityError( tOutput( "$login_error_blacklist", authority ) ); - } - - if ( sn_AuthorityWhitelist != "" && !tIsInList( sn_AuthorityWhitelist, authority ) ) - { - return ReportAuthorityError( tOutput( "$login_error_whitelist", authority ) ); - } - - // try yo find a better method, fetch method list - std::stringstream answer; - int rc = nKrawall::FetchURL( fullAuthority, "?query=methods", answer ); - - if ( rc == -1 ) - { - return ReportAuthorityError( tOutput( "$login_error_invalidurl_notfound", authority ) ); - } - ... [truncated message content] |
From: <z-...@us...> - 2008-02-05 23:41:17
|
Revision: 7747 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7747&view=rev Author: z-man Date: 2008-02-05 15:41:20 -0800 (Tue, 05 Feb 2008) Log Message: ----------- Fixed ed's crash. My bad. Already dead sparks were being accessed. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.h armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.h Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-02-05 23:41:20 UTC (rev 7747) @@ -89,30 +89,23 @@ void eGameObject::RemoveFromGame() { - int oldID = id; - if ( oldID >= 0 ) - { - AddRef(); - } + tJUST_CONTROLLED_PTR< eGameObject > keepAlive; + if ( id >= 0 ) + keepAlive = this; OnRemoveFromGame(); DoRemoveFromGame(); - - if ( oldID >= 0 ) - { - Release(); - } } // called on RemoveFromGame(). Call base class implementation, too, in your implementation. void eGameObject::OnRemoveFromGame() { + // remove from grid + currentFace = 0; + // remove from lists RemoveFromListsAll(); - - // remove from grid - currentFace = 0; } @@ -878,5 +871,44 @@ } } +eReferencableGameObject::eReferencableGameObject(eGrid *grid, const eCoord &p,const eCoord &d, eFace *currentface, bool autodelete) +: eGameObject( grid, p, d, currentface, autodelete ) +{ +} +// delegate real reference counting +void eReferencableGameObject::AddRef() +{ + tReferencable< eReferencableGameObject >::AddRef(); +} +void eReferencableGameObject::Release() +{ + tReferencable< eReferencableGameObject >::Release(); +} + +void eReferencableGameObject::DoRemoveFromGame() +{ + // nothing needs to be done, the reference counting takes care of the destruction +} + +eStackGameObject::eStackGameObject(eGrid *grid, const eCoord &p,const eCoord &d, eFace *currentface) +: eGameObject( grid, p, d, currentface, false ) +{ +} + +void eStackGameObject::AddRef() +{ +} + +void eStackGameObject::Release() +{ +} + +void eStackGameObject::DoRemoveFromGame() +{ + // must not get called + tERR_ERROR("Stack game object removed from game."); +} + + Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-02-05 23:41:20 UTC (rev 7747) @@ -32,6 +32,7 @@ #include "tList.h" // #include "eGrid.h" #include "eCoord.h" +#include "tSafePTR.h" class eGrid; class uActionPlayer; @@ -102,8 +103,8 @@ eGrid* Grid() const { return grid; } eFace* CurrentFace() const { return currentFace; } - virtual void AddRef(){}; //!< adds a reference - virtual void Release(){}; //!< removes a reference + virtual void AddRef() = 0; //!< adds a reference + virtual void Release() = 0; //!< removes a reference void AddToList(); void RemoveFromList(); @@ -212,6 +213,34 @@ static void DeleteAll(eGrid *grid); }; +// game object to be created on the heap +class eReferencableGameObject: public eGameObject, public tReferencable< eReferencableGameObject > +{ +public: + eReferencableGameObject(eGrid *grid, const eCoord &p,const eCoord &d, eFace *currentface, bool autodelete=1); + + // real reference counting + virtual void AddRef(); //!< adds a reference + virtual void Release(); //!< removes a reference + +private: + virtual void DoRemoveFromGame(); //!< called when removed from the game +}; + +// game object of temporary lifetime on the stack +class eStackGameObject: public eGameObject +{ +public: + eStackGameObject(eGrid *grid, const eCoord &p,const eCoord &d, eFace *currentface); + + // dummy reference counting + virtual void AddRef(); //!< adds a reference + virtual void Release(); //!< removes a reference + +private: + virtual void DoRemoveFromGame(); //!< called when removed from the game +}; + //! Exception to throw when a gameobject dies during movement class eDeath { Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.cpp 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.cpp 2008-02-05 23:41:20 UTC (rev 7747) @@ -35,7 +35,7 @@ #endif eSensor::eSensor(eGameObject *o,const eCoord &start,const eCoord &d) - :eGameObject(o->grid, start,d,o->currentFace,0) + :eStackGameObject(o->grid, start,d,o->currentFace) ,hit(1000),ehit(NULL),lr(0), owned(o) , inverseSpeed_(0) { if (owned) Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.h 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eSensor.h 2008-02-05 23:41:20 UTC (rev 7747) @@ -36,7 +36,7 @@ class eSensorFinished{}; // sensor sent out to detect near eWalls -class eSensor: public eGameObject{ +class eSensor: public eStackGameObject{ public: REAL hit; // where is the eWall? tCHECKED_PTR_CONST(eHalfEdge) ehit; // the eWall we sense Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.cpp 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.cpp 2008-02-05 23:41:20 UTC (rev 7747) @@ -33,7 +33,7 @@ bool white_sparks=false; gSpark::gSpark(eGrid *grid, const eCoord &pos,const eCoord &dir,REAL time,REAL ocolor_r,REAL ocolor_g,REAL ocolor_b,REAL ecolor_r,REAL ecolor_g,REAL ecolor_b) - :eGameObject(grid, pos, dir , NULL, true), + :eReferencableGameObject(grid, pos, dir , NULL, true), // sound(scrap), createTime(time){ lastTime=createTime; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.h 2008-02-05 22:08:44 UTC (rev 7746) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gSparks.h 2008-02-05 23:41:20 UTC (rev 7747) @@ -32,7 +32,7 @@ #include "eGameObject.h" #include "rModel.h" -class gSpark: public eGameObject{ // When the player nearly hits a eWall +class gSpark: public eReferencableGameObject{ // When the player nearly hits a eWall REAL createTime; #define SPARKS 10 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-02-08 18:17:20
|
Revision: 7809 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7809&view=rev Author: z-man Date: 2008-02-08 10:17:21 -0800 (Fri, 08 Feb 2008) Log Message: ----------- OMG! More AuthentiFIcation. Empty stub files, but nevertheless. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/Makefile.am Added Paths: ----------- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.h Removed Paths: ------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.h Modified: armagetronad/branches/0.2.8/armagetronad/src/Makefile.am =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-02-08 18:11:52 UTC (rev 7808) +++ armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-02-08 18:17:21 UTC (rev 7809) @@ -78,8 +78,8 @@ libenginecore_a_SOURCES=engine/eGameObject.cpp engine/eGameObject.h \ engine/eGrid.cpp engine/eGrid.h -libengine_a_SOURCES=engine/eAdvWall.cpp engine/eAdvWall.h engine/eAuthentification.cpp\ - engine/eAuthentification.h engine/eAxis.cpp engine/eAxis.h engine/eCamera.cpp engine/eCamera.h\ +libengine_a_SOURCES=engine/eAdvWall.cpp engine/eAdvWall.h engine/eAuthentication.cpp\ + engine/eAuthentication.h engine/eAxis.cpp engine/eAxis.h engine/eCamera.cpp engine/eCamera.h\ engine/eCoord.h engine/eDebugLine.cpp engine/eDebugLine.h engine/eDisplay.cpp engine/eFloor.cpp\ engine/eFloor.h \ engine/eKrawall.cpp engine/eKrawall.h engine/eNetGameObject.cpp engine/eNetGameObject.h\ Copied: armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.cpp (from rev 7774, armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.cpp) =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.cpp (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.cpp 2008-02-08 18:17:21 UTC (rev 7809) @@ -0,0 +1,28 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2000 Manuel Moos (ma...@mo...) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*************************************************************************** + +*/ + +//#include ".h" Copied: armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.h (from rev 7774, armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.h) =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.h (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentication.h 2008-02-08 18:17:21 UTC (rev 7809) @@ -0,0 +1,32 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2000 Manuel Moos (ma...@mo...) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*************************************************************************** + +*/ + +#ifndef ArmageTron__H +#define ArmageTron__H + + +#endif Deleted: armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.cpp 2008-02-08 18:11:52 UTC (rev 7808) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.cpp 2008-02-08 18:17:21 UTC (rev 7809) @@ -1,28 +0,0 @@ -/* - -************************************************************************* - -ArmageTron -- Just another Tron Lightcycle Game in 3D. -Copyright (C) 2000 Manuel Moos (ma...@mo...) - -************************************************************************** - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*************************************************************************** - -*/ - -//#include ".h" Deleted: armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.h 2008-02-08 18:11:52 UTC (rev 7808) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eAuthentification.h 2008-02-08 18:17:21 UTC (rev 7809) @@ -1,32 +0,0 @@ -/* - -************************************************************************* - -ArmageTron -- Just another Tron Lightcycle Game in 3D. -Copyright (C) 2000 Manuel Moos (ma...@mo...) - -************************************************************************** - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*************************************************************************** - -*/ - -#ifndef ArmageTron__H -#define ArmageTron__H - - -#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-20 20:47:24
|
Revision: 8020 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8020&view=rev Author: wrtlprnft Date: 2008-02-20 12:47:26 -0800 (Wed, 20 Feb 2008) Log Message: ----------- No longer print successful calls to ACCESS_LEVEL and USER_LEVEL to the console when loading a config file at start Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-20 19:39:54 UTC (rev 8019) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-20 20:47:26 UTC (rev 8020) @@ -3899,14 +3899,20 @@ int levelInt; s >> levelInt; tAccessLevel level = static_cast< tAccessLevel >( levelInt ); - + if ( s.fail() ) { - con << tOutput( "$user_level_usage" ); + if(printErrors) + { + con << tOutput( "$user_level_usage" ); + } return GetDefault(); } - con << tOutput( "$user_level_change", name, tCurrentAccessLevel::GetName( level ) ); + if(printChange) + { + con << tOutput( "$user_level_change", name, tCurrentAccessLevel::GetName( level ) ); + } return level; } Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-02-20 19:39:54 UTC (rev 8019) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tConfiguration.cpp 2008-02-20 20:47:26 UTC (rev 8020) @@ -231,7 +231,10 @@ if ( s.fail() ) { - con << tOutput( "$access_level_usage" ); + if(printErrors) + { + con << tOutput( "$access_level_usage" ); + } return; } @@ -248,10 +251,13 @@ if ( ci->requiredLevel != level ) { ci->requiredLevel = level; - con << tOutput( "$access_level_change", name, tCurrentAccessLevel::GetName( level ) ); + if(printChange) + { + con << tOutput( "$access_level_change", name, tCurrentAccessLevel::GetName( level ) ); + } } } - else + else if(printErrors) { con << tOutput( "$config_command_unknown", name ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-03 11:39:44
|
Revision: 8225 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8225&view=rev Author: z-man Date: 2008-03-03 03:39:47 -0800 (Mon, 03 Mar 2008) Log Message: ----------- Broke the unfortunate chain of events that leads to severe FPS drops on old clients on several links: - server no longer sends redundant cycle death sync messages. - client ignores redundant cycle death messages; they caused calls to eGameObject::Move on objects already removed from the activity list. - game objects removed from the active lists no longer have currentFace set - game objects removed from the list, when they move, just update their position and don't get a new currentFace. The root of the problem are inactive game objects that still have a currentFace set. That causes that face and all its replacement in the grid reordering code to be marked as "not to be simplified". Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-03-03 11:00:19 UTC (rev 8224) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-03-03 11:39:47 UTC (rev 8225) @@ -63,6 +63,8 @@ int oldID = id; + currentFace = 0; + grid->gameObjects.Remove(this,id); grid->gameObjectsInactive.Add(this,inactiveID); @@ -77,6 +79,8 @@ int oldID = id; + currentFace = 0; + grid->gameObjects.Remove(this,id); grid->gameObjectsInactive.Remove(this,inactiveID); grid->gameObjectsInteresting.Remove(this,interestingID); @@ -125,19 +129,8 @@ id=-1; interestingID=-1; inactiveID=-1; - //if (grid) - //{ - // AddToList(); - // FindCurrentFace(); - //} if ( lastTime < 0 ) lastTime=0; - - if ( !currentFace ) - { - FindCurrentFace(); - } - team = 0; } @@ -451,8 +444,12 @@ PassEdge( passing.wall, TIME( (*currentTempCollision).first ), passing.ratio, 0 ); ++ currentTempCollision; } - } + else // !currentFace + { + // just move. + pos = dest; + } // not if the movement timed out // pos=stop; @@ -508,6 +505,16 @@ } } + // don't fetch a new current face if you're out of the game + if ( !currentFace && GOID() < 0 ) + { +#ifdef DEBUG + con << "Attempting to get a current face, but object is not in game.\n"; + st_Breakpoint(); + return; +#endif + } + // did that do the trick? If no, use brute force. if ( !currentFace ) currentFace = grid->FindSurroundingFace(pos); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-03-03 11:00:19 UTC (rev 8224) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-03-03 11:39:47 UTC (rev 8225) @@ -1764,7 +1764,11 @@ ,parent_( 0 ) { // an extrapolator should not be visible as a gameobject from the outside + eFace * currentFaceBack = currentFace; RemoveFromList(); + currentFace = currentFaceBack; + if ( !currentFace ) + currentFace = grid->FindSurroundingFace( pos, currentFace ); } // gCycleExtrapolator::gCycleExtrapolator(nMessage &m); @@ -2554,9 +2558,6 @@ // don't timestep when you're dead if ( !Alive() ) { - if ( sn_GetNetState() == nSERVER ) - RequestSync(); - // die completely Die( lastTime ); @@ -3097,6 +3098,12 @@ void gCycle::Die( REAL time ) { + if ( sn_GetNetState() == nSERVER ) + { + // request one last sync + RequestSync( true ); + } + gCycleMovement::Die( time ); // reset smoothing @@ -3714,9 +3721,6 @@ currentWall = NULL; } - - // request a new sync - RequestSync(); } } // z-man: another stupid idea. Why would we need a destination when we're dead? @@ -4911,6 +4915,12 @@ void gCycle::RequestSyncOwner() { + // no more syncs when you're dead + if ( !Alive() ) + { + return; + } + // nothing to do on the client or if the cycle belongs to an AI if ( sn_GetNetState() != nSERVER || Owner() == 0 ) return; @@ -4926,6 +4936,12 @@ void gCycle::RequestSyncAll() { + // no more syncs when you're dead + if ( !Alive() ) + { + return; + } + // nothing to do on the client or if the cycle belongs to an AI if ( sn_GetNetState() != nSERVER || Owner() == 0 ) return; @@ -5270,6 +5286,15 @@ return; } + // no point going on if you're not alive + if (!Alive()) + { +#ifdef DEBUG + con << "Received duplicate death sync message; those things confuse old clients!\n"; +#endif + return; + } + gDestination emergency_aft(*this); // all the data was read. check where it fits in our destination list: Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2008-03-03 11:00:19 UTC (rev 8224) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2008-03-03 11:39:47 UTC (rev 8225) @@ -2568,6 +2568,30 @@ maxSpaceHit_ = NULL; } +void gCycleMovement::RequestSync(bool ack) +{ + // no more syncs when you're dead + if ( !Alive() ) + { + return; + } + + // delegate + eNetGameObject::RequestSync( ack ); +} + +void gCycleMovement::RequestSync(int user,bool ack) +{ + // no more syncs when you're dead + if ( !Alive() ) + { + return; + } + + // delegate + eNetGameObject::RequestSync( user, ack ); +} + void gCycleMovement::OnRemoveFromGame() { delete maxSpaceHit_; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h 2008-03-03 11:00:19 UTC (rev 8224) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h 2008-03-03 11:39:47 UTC (rev 8225) @@ -139,6 +139,9 @@ gCycleMovement ( nMessage & message ) ; //!< remote constructor virtual ~gCycleMovement () ; //!< destructor virtual void OnRemoveFromGame(); // called when the cycle is physically removed from the game + + void RequestSync(bool ack=true); //!< request a sync + void RequestSync(int user,bool ack); //!< only for a single user protected: //! data from sync message struct SyncData This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-07 11:03:23
|
Revision: 8272 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8272&view=rev Author: z-man Date: 2008-03-07 03:03:02 -0800 (Fri, 07 Mar 2008) Log Message: ----------- Added eGameObject::OnRoundBegin(), called after game object creation. Used it in the zone code to fix the flickering empty zone glitch in sumo, and to avoid rare midgame zone ownership changes. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-03-07 00:09:25 UTC (rev 8271) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-03-07 11:03:02 UTC (rev 8272) @@ -624,6 +624,7 @@ } // return value: shall this object be destroyed? +void eGameObject::OnRoundBegin(){} void eGameObject::OnRoundEnd(){} void eGameObject::Kill(){} Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-03-07 00:09:25 UTC (rev 8271) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-03-07 11:03:02 UTC (rev 8272) @@ -157,6 +157,10 @@ return w; } + //! called when the round begins, after all game objects have been created, + //! before the first network sync is sent out. + virtual void OnRoundBegin(); + //! called when the round ends virtual void OnRoundEnd(); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-03-07 00:09:25 UTC (rev 8271) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-03-07 11:03:02 UTC (rev 8272) @@ -3170,6 +3170,19 @@ ePlayerNetID::RankingLadderLog(); + // do round begin stuff + { + const tList<eGameObject>& gameObjects = Grid()->GameObjects(); + for (int i=gameObjects.Len()-1;i>=0;i--) + { + eGameObject * e = gameObjects(i); + if ( e ) + { + e->OnRoundBegin(); + } + } + } + // do the first analysis of the round, now is the time to get it used to the number of teams Analysis( -1000 ); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-03-07 00:09:25 UTC (rev 8271) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-03-07 11:03:02 UTC (rev 8272) @@ -686,6 +686,8 @@ teamDistance_ = 0; lastEnemyContact_ = se_GameTime(); touchy_ = false; + + color_.r = color_.g = color_.b = 0; } // ******************************************************************************* @@ -795,6 +797,12 @@ bool gBaseZoneHack::Timestep( REAL time ) { + // no team?!? Get rid of this zone ASAP. + if ( !team ) + { + return true; + } + if ( currentState_ == State_Conquering ) { // let zone vanish @@ -893,89 +901,19 @@ } } - // reset counts enemiesInside_ = ownersInside_ = 0; - // determine the owning team: the one that has a player spawned closest - - // find the closest player - if ( !team ) - { - teamDistance_ = 0; - const tList<eGameObject>& gameObjects = Grid()->GameObjects(); - gCycle * closest = NULL; - REAL closestDistance = 0; - for (int i=gameObjects.Len()-1;i>=0;i--) - { - gCycle *other=dynamic_cast<gCycle *>(gameObjects(i)); - - if (other ) - { - eTeam * otherTeam = other->Player()->CurrentTeam(); - eCoord otherpos = other->Position() - pos; - REAL distance = otherpos.NormSquared(); - if ( !closest || distance < closestDistance ) - { - // check whether other zones are already registered to that team - gBaseZoneHack * farthest = NULL; - int count = 0; - if ( sg_baseZonesPerTeam > 0 ) - CountZonesOfTeam( Grid(), otherTeam, count, farthest ); - - // only set team if not too many closer other zones are registered - if ( sg_baseZonesPerTeam == 0 || count < sg_baseZonesPerTeam || farthest->teamDistance_ > distance ) - { - closest = other; - closestDistance = distance; - } - } - } - } - - if ( closest ) - { - // take over team and color - team = closest->Player()->CurrentTeam(); - color_.r = team->R()/15.0; - color_.g = team->G()/15.0; - color_.b = team->B()/15.0; - teamDistance_ = closestDistance; - - RequestSync(); - } - - // if this zone does not belong to a team, discard it. - if ( !team ) - { - return true; - } - - // check other zones owned by the same team. Discard the one farthest away - // if the max count is exceeded - if ( team && sg_baseZonesPerTeam > 0 ) - { - gBaseZoneHack * farthest = 0; - int count = 0; - CountZonesOfTeam( Grid(), team, count, farthest ); - - // discard team of farthest zone - if ( count > sg_baseZonesPerTeam ) - farthest->team = NULL; - } - } - - // delegate bool ret = gZone::Timestep( time ); // reward survival - if ( !ret && onlySurvivor_ ) + if ( team && !ret && onlySurvivor_ ) { const char* message= ( eTeam::teams.Len() > 2 || sg_onConquestScore ) ? "$player_win_held_fortress" : "$player_win_conquest"; sg_DeclareWinner( team, message ); } - + return ret; } @@ -1046,7 +984,10 @@ void gBaseZoneHack::OnConquest( void ) { tString log; - log << "BASEZONE_CONQUERED " << ePlayerNetID::FilterName(team->Name()) << " " << GetPosition().x << " " << GetPosition().y << '\n'; + if ( team ) + { + log << "BASEZONE_CONQUERED " << ePlayerNetID::FilterName(team->Name()) << " " << GetPosition().x << " " << GetPosition().y << '\n'; + } se_SaveToLadderLog(log); float rr = GetRadius(); rr *= rr; @@ -1189,6 +1130,90 @@ // ******************************************************************************* // * +// * OnRoundBegin +// * +// ******************************************************************************* +//! +//! @return shall the hole process be repeated? +//! +// ******************************************************************************* + +void gBaseZoneHack::OnRoundBegin( void ) +{ + // determine the owning team: the one that has a player spawned closest + // find the closest player + if ( !team ) + { + teamDistance_ = 0; + const tList<eGameObject>& gameObjects = Grid()->GameObjects(); + gCycle * closest = NULL; + REAL closestDistance = 0; + for (int i=gameObjects.Len()-1;i>=0;i--) + { + gCycle *other=dynamic_cast<gCycle *>(gameObjects(i)); + + if (other ) + { + eTeam * otherTeam = other->Player()->CurrentTeam(); + eCoord otherpos = other->Position() - pos; + REAL distance = otherpos.NormSquared(); + if ( !closest || distance < closestDistance ) + { + // check whether other zones are already registered to that team + gBaseZoneHack * farthest = NULL; + int count = 0; + if ( sg_baseZonesPerTeam > 0 ) + CountZonesOfTeam( Grid(), otherTeam, count, farthest ); + + // only set team if not too many closer other zones are registered + if ( sg_baseZonesPerTeam == 0 || count < sg_baseZonesPerTeam || farthest->teamDistance_ > distance ) + { + closest = other; + closestDistance = distance; + } + } + } + } + + if ( closest ) + { + // take over team and color + team = closest->Player()->CurrentTeam(); + color_.r = team->R()/15.0; + color_.g = team->G()/15.0; + color_.b = team->B()/15.0; + teamDistance_ = closestDistance; + + RequestSync(); + } + + // if this zone does not belong to a team, discard it. + if ( !team ) + { + RemoveFromGame(); + return; + } + + // check other zones owned by the same team. Discard the one farthest away + // if the max count is exceeded + if ( team && sg_baseZonesPerTeam > 0 ) + { + gBaseZoneHack * farthest = 0; + int count = 0; + CountZonesOfTeam( Grid(), team, count, farthest ); + + // discard team of farthest zone + if ( count > sg_baseZonesPerTeam ) + { + farthest->team = NULL; + farthest->RemoveFromGame(); + } + } + } +} + +// ******************************************************************************* +// * // * OnRoundEnd // * // ******************************************************************************* Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h 2008-03-07 00:09:25 UTC (rev 8271) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h 2008-03-07 11:03:02 UTC (rev 8272) @@ -173,6 +173,7 @@ virtual void OnVanish(); //!< called when the zone vanishes virtual void OnConquest(); //!< called when the zone gets conquered virtual void CheckSurvivor(); //!< checks for the only surviving zone + virtual void OnRoundBegin(); //!< called on the beginning of the round virtual void OnRoundEnd(); //!< called on the end of the round void ZoneWasHeld(); //!< call when the zone was held as long as possible with the set game rules This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-03-16 22:16:29
|
Revision: 8326 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8326&view=rev Author: wrtlprnft Date: 2008-03-16 15:16:35 -0700 (Sun, 16 Mar 2008) Log Message: ----------- Append (and parse) a list of authenticated names to the big server info messages (the ones that make up the details you see on the server browser) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-16 15:40:57 UTC (rev 8325) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-16 22:16:35 UTC (rev 8326) @@ -6410,8 +6410,8 @@ tString ret; for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) - { - ePlayerNetID* p = se_PlayerNetIDs(i); + { + ePlayerNetID* p = se_PlayerNetIDs(i); if ( p->IsHuman() ) { ret << p->GetName() << "\n"; @@ -6421,6 +6421,32 @@ return ret; } + virtual tString GetGlobalIDs() const + { + tString ret; +#ifdef KRAWALL_SERVER + int count = 0; + + for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) + { + ePlayerNetID* p = se_PlayerNetIDs(i); + if ( p->IsHuman() ) + { + if( p->IsAuthenticated() && !se_Hide(p, tAccessLevel_Default) ) + { + for(; count > 0; --count) + { + ret << "\n"; + } + ret << p->GetFilteredAuthenticatedName(); + } + ++count; + } + } +#endif + return ret; + } + virtual tString GetOptions() const { se_CutString( sg_options, 240 ); Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-03-16 15:40:57 UTC (rev 8325) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-03-16 22:16:35 UTC (rev 8326) @@ -1226,6 +1226,7 @@ ping = .999; users = 0; userNames_ = userNamesOneLine_ = "Sever polled over master server, no reliable user data available."; + userGlobalIDs_ = ""; advancedInfoSet = true; CalcScore(); @@ -2640,6 +2641,7 @@ if ( nServerInfoAdmin::GetAdmin() ) { userNames_ = nServerInfoAdmin::GetAdmin()->GetUsers(); + userGlobalIDs_ = nServerInfoAdmin::GetAdmin()->GetGlobalIDs(); options_ = nServerInfoAdmin::GetAdmin()->GetOptions(); url_ = nServerInfoAdmin::GetAdmin()->GetUrl(); } @@ -2650,6 +2652,7 @@ userNames_ = str; options_ = str; url_ = str; + userGlobalIDs_ = ""; } } @@ -2676,6 +2679,8 @@ m << userNames_; m << options_; m << url_; + + m << userGlobalIDs_; } // ******************************************************************************************* @@ -2729,13 +2734,36 @@ options_ = "No Info\n"; url_ = "No Info\n"; } + if ( !m.End() ) + { + m >> userGlobalIDs_; + } + else + { + userGlobalIDs_ = ""; + } userNamesOneLine_.Clear(); - for ( int i = 0; i < userNames_.Len()-2 ; ++i ) + for ( int i = 0, j = 0; i < userNames_.Len()-1 ; ++i ) { char c = userNames_[i]; if ( c == '\n' ) - userNamesOneLine_ << "0xffffff, "; + { + userNamesOneLine_ << "0xffffff"; + if( j < userGlobalIDs_.Len()-2 && userGlobalIDs_[j] != '\n' ) { + userNamesOneLine_ << " ("; + do + { + userNamesOneLine_ << userGlobalIDs_[j]; + } + while ( ++j < userGlobalIDs_.Len()-1 && userGlobalIDs_[j] != '\n' ); + userNamesOneLine_ << ")"; + } + else + ++j; + if ( i < userNames_.Len()-2 ) + userNamesOneLine_ << ", "; + } else userNamesOneLine_ << c; } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-03-16 15:40:57 UTC (rev 8325) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-03-16 22:16:35 UTC (rev 8326) @@ -140,6 +140,7 @@ int maxUsers_; // maximum number of users allowed tString userNames_; // names of the connected users + tString userGlobalIDs_; // IDs of the connected users tString userNamesOneLine_;// names of the connected users in one line tString options_; // description of non-default options tString url_; // url asociated with the server @@ -325,6 +326,7 @@ private: virtual tString GetUsers() const = 0; + virtual tString GetGlobalIDs() const = 0; virtual tString GetOptions() const = 0; virtual tString GetUrl() const = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |