From: <z-...@us...> - 2007-04-20 22:42:06
|
Revision: 7203 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7203&view=rev Author: z-man Date: 2007-04-20 15:42:06 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Master server log now contains server names (after one server setup support request too many where the admin is incapable of keeping his server up long enough or stating its IP) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8605 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8615 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-04-20 19:08:11 UTC (rev 7202) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-04-20 22:42:06 UTC (rev 7203) @@ -2632,6 +2632,8 @@ void nServerInfo::NetReadThis( nMessage & m ) { + tString oldName = name; + sn_ReadFiltered( m, name ); // get the server name m >> users; // get the playing users @@ -2688,9 +2690,16 @@ { if ( !advancedInfoSetEver ) { - con << "Acknowledged server: " << ToString( *this ) << "\n"; + con << "Acknowledged server: " << ToString( *this ) << ", name: \"" << tColoredString::RemoveColors(name) << "\"\n"; + con << "\n"; Save(); } + else if ( name != oldName ) + { + con << "Name of server " << ToString( *this ) + << " changed from \"" << tColoredString::RemoveColors(oldName) + << "\" to \"" << tColoredString::RemoveColors(name) << "\"\n"; + } // broadcast the server to the other master servers nServerInfo * master = GetMasters(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-04-21 08:37:28
|
Revision: 7205 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7205&view=rev Author: z-man Date: 2007-04-21 01:37:28 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Added earlier "starting to lose contact" message to master server log. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8615 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8623 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-04-21 08:24:11 UTC (rev 7204) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2007-04-21 08:37:28 UTC (rev 7205) @@ -1785,6 +1785,10 @@ { con << "Lost contact with server: " << ToString( *this ) << "\n"; } + else if ( sn_IsMaster && timesNotAnswered == 2 ) + { + con << "Starting to lose contact with server: " << ToString( *this ) << ", name \"" << tColoredString::RemoveColors(name) << "\"\n"; + } } queried++; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-15 00:18:02
|
Revision: 7400 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7400&view=rev Author: z-man Date: 2007-11-14 16:18:04 -0800 (Wed, 14 Nov 2007) Log Message: ----------- Fixed bugs when MAX_CLIENTS was lowered when players were already online. Modified Paths: -------------- 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:10195 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10197 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-11-14 23:53:58 UTC (rev 7399) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-11-15 00:18:04 UTC (rev 7400) @@ -1406,7 +1406,7 @@ if ( reset ) { int count = 0; - for(int user2=1;user2<=sn_maxClients;++user2) + for(int user2=1;user2<=MAXCLIENTS;++user2) { if(!sn_Connections[user2].socket) continue; @@ -1427,7 +1427,7 @@ int CountSameConnection( int user ) { int count = 0; - for(int user2=1;user2<=sn_maxClients;++user2) + for(int user2=1;user2<=MAXCLIENTS;++user2) { if( NULL == sn_Connections[user2].socket ) continue; @@ -1444,42 +1444,29 @@ // determine a free connection slot or at least one where the user won't be missed int GetFreeSlot() { - int user; + int user; // level 1: look for free slot - for(user=1;user<=sn_maxClients;++user) + if ( sn_NumUsers() < sn_maxClients ) { - // look for empty slot - if(!sn_Connections[user].socket) + for(user=1;user<=sn_maxClients;++user) { - return user; + // look for empty slot + if(!sn_Connections[user].socket) + { + return user; + } } } int best = -1; - // level 2: look for slot timing out anyway - // z-man: not a good idea after all, causes unjustified kicks... - /* - //int bestTimeout = kickOnDemandTimeout; + // level 2 kicked out users who were timing out and was not a good idea. - for(user=1;user<=sn_maxClients;++user) - { - int timeout = timeouts[user]; - if ( timeout > bestTimeout ) - { - bestTimeout = timeout; - best = user; - } - } - if ( best > 0 ) - return best; - */ - int bestCount = sn_allowSameIPCountSoft-1; // level 3: look for dublicate IPs - for(user=1;user<=sn_maxClients;++user) + for(user=1;user<=MAXCLIENTS;++user) { int count = CountSameIP( user ); if ( count > bestCount ) @@ -1729,8 +1716,10 @@ } nWaitForAck::AckAllPeer(id); - if (0<id && id<=sn_maxClients) + if (0<id && id<=MAXCLIENTS) + { sn_DisconnectUser(id, "$network_kill_logout"); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-10 09:42:12
|
Revision: 7405 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7405&view=rev Author: z-man Date: 2007-12-10 01:42:12 -0800 (Mon, 10 Dec 2007) Log Message: ----------- Fixed 100% cpu usage of the server when data was incoming on the control socket at the wrong time (any time it is not talking to the master servers). Modified Paths: -------------- 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:10197 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10203 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-05 04:56:33 UTC (rev 7404) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-10 09:42:12 UTC (rev 7405) @@ -1444,7 +1444,7 @@ // determine a free connection slot or at least one where the user won't be missed int GetFreeSlot() { - int user; + int user; // level 1: look for free slot if ( sn_NumUsers() < sn_maxClients ) @@ -2943,6 +2943,16 @@ // z-man: after much thought, the server does also need to listen to the // network control socket. .... Thinking again, it's only important for the master // servers, and they call rec_peer(0) separately. + + // 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); + } + break; case nCLIENT: 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:58
|
Revision: 7407 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7407&view=rev Author: z-man Date: 2007-12-10 02:33:30 -0800 (Mon, 10 Dec 2007) Log Message: ----------- Modified Paths: -------------- 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:10209 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10210 Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-10 10:32:53 UTC (rev 7406) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2007-12-10 10:33:30 UTC (rev 7407) @@ -2957,16 +2957,6 @@ // z-man: after much thought, the server does also need to listen to the // network control socket. .... Thinking again, it's only important for the master // servers, and they call rec_peer(0) separately. - - // 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); - } - break; case nCLIENT: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-19 09:56:43
|
Revision: 7550 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7550&view=rev Author: z-man Date: 2008-01-19 01:56:44 -0800 (Sat, 19 Jan 2008) Log Message: ----------- Servers that are no longer listed on the master servers are no longer shown. This should get rid of the huge list of unreachable servers people report sometimes. Modified Paths: -------------- 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/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-19 02:55:58 UTC (rev 7549) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-19 09:56:44 UTC (rev 7550) @@ -162,6 +162,7 @@ release_("pre_0.2.5"), login2_(true), timesNotAnswered(5), + stillOnMasterServer(false), name(""), users(0), maxUsers_(MAXCLIENTS), @@ -1032,7 +1033,7 @@ } n->nServerInfoBase::CopyFrom( baseInfo ); - // n->timesNotAnswered = 1; + n->stillOnMasterServer = true; if (n->name.Len() <= 1) n->name << ToString( baseInfo ); @@ -1490,6 +1491,27 @@ o << "$network_master_finish"; con << o; + // remove servers that are no longer listed on the master + run = GetFirstServer(); + while (run) + { + nServerInfo * next = run->Next(); + if ( !run->stillOnMasterServer ) + { + // if the server has still positive score bias, just reduce that + if ( run->scoreBias_ > 0 ) + { + run->scoreBias_ -= 10; + } + else + { + // kill it + delete run; + } + } + run = next; + } + Save(tDirectories::Var(), MasterFile( fileSuffix )); sn_SetNetState(nSTANDALONE); @@ -2296,7 +2318,7 @@ nServerInfoBase::nServerInfoBase() : connectionName_(""), - port_(0) + port_(0) { } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-19 02:55:58 UTC (rev 7549) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-19 09:56:44 UTC (rev 7550) @@ -132,6 +132,7 @@ bool login2_; // flag indicating whether the second version of the logic can be tried int timesNotAnswered; // number of times the server did not answer to information queries recently + bool stillOnMasterServer; // flag indicating whether the server is still listed on the master // human information tString name; // the human name of the server ("Z-Man's Armagetron Server"); 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:00:27
|
Revision: 8224 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8224&view=rev Author: z-man Date: 2008-03-03 03:00:19 -0800 (Mon, 03 Mar 2008) Log Message: ----------- Not contacting master servers when the hostnames don't resolve. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.h Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-03-02 18:13:56 UTC (rev 8223) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-03-03 11:00:19 UTC (rev 8224) @@ -1625,7 +1625,10 @@ while ( run ) { - TellMasterAboutMe( run ); + if ( run->GetAddress().IsSet() ) + { + TellMasterAboutMe( run ); + } run = run->Next(); } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp 2008-03-02 18:13:56 UTC (rev 8223) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.cpp 2008-03-03 11:00:19 UTC (rev 8224) @@ -1407,8 +1407,24 @@ return *this; } + // ******************************************************************************************* // * +// * IsSet +// * +// ******************************************************************************************* +//! +//! @return true only if address was set to something valid +//! +// ******************************************************************************************* + +bool nAddress::IsSet () const +{ + return addr_.addr_in.sin_addr.s_addr != INADDR_ANY; +} + +// ******************************************************************************************* +// * // * Compare // * // ******************************************************************************************* Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.h 2008-03-02 18:13:56 UTC (rev 8223) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nSocket.h 2008-03-03 11:00:19 UTC (rev 8224) @@ -90,6 +90,8 @@ int GetPort ( void ) const ; //!< Gets the port of the address nAddress const & GetPort ( int & port ) const ; //!< Gets the port of the address + bool IsSet () const ; //!< returns true only if address is not INETADDR_ANY + static int Compare ( const nAddress & a1, const nAddress & a2 ); //!< compares two addresses operator struct sockaddr * () { return &addr_.addr; } //!< conversion to sockaddr This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-20 17:08:12
|
Revision: 8376 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8376&view=rev Author: z-man Date: 2008-03-20 10:08:08 -0700 (Thu, 20 Mar 2008) Log Message: ----------- Splitting too long console messages into several packets instead of just truncating them. Sometimes. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-03-20 16:44:28 UTC (rev 8375) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-03-20 17:08:08 UTC (rev 8376) @@ -2851,23 +2851,23 @@ static nDescriptor sn_ConsoleOut_nd(8,sn_ConsoleOut_handler,"sn_ConsoleOut"); +// rough maximal packet size, better send nothig bigger, or it will +// get fragmented. +#define MTU 1400 + // causes the connected clients to print a message -nMessage* sn_ConsoleOutMessage( const tOutput& o ) +nMessage* sn_ConsoleOutMessage( tString const & message ) { - tString message(o); - message << "0xffffff"; - - // truncate message to 1.4K, a safe size for all UDP packets - static const int maxLen = 1400; + // truncate message to about 1.5K, a safe size for all UDP packets + static const int maxLen = MTU+100; static bool recurse = true; if ( message.Len() > maxLen && recurse ) { recurse = false; tERR_WARN( "Long console message truncated."); - - message.SetLen( maxLen+1 ); - message[maxLen]='\0'; - recurse = false; + nMessage * m = sn_ConsoleOutMessage( message.SubStr( 0, MTU ) ); + recurse = true; + return m; } nMessage* m=new nMessage(sn_ConsoleOut_nd); @@ -2876,23 +2876,61 @@ return m; } -void sn_ConsoleOut(const tOutput& o,int client){ - // tString message(o); +void sn_ConsoleOutRaw( tString & message,int client){ + tJUST_CONTROLLED_PTR< nMessage > m = sn_ConsoleOutMessage( message ); - tJUST_CONTROLLED_PTR< nMessage > m = sn_ConsoleOutMessage( o ); - if (client<0){ m->BroadCast(); - con << o; + con << message; } else if (client==sn_myNetID) { - con << o; + con << message; } else + { m->Send(client); + } } +void sn_ConsoleOutString( tString & message,int client){ + // check if string is too long + if ( message.Len() <= MTU ) + { + // no? Fine, just send it in one go. + message << "0xffffff"; + sn_ConsoleOutRaw( message, client ); + + return; + } + + // darn, it is too long. Try to find a good spot to cut it + int cut = MTU; + while ( cut > 0 && message(cut) != '\n' ) + { + --cut; + } + if ( cut == 0 ) + { + // no suitable spot found, just cut anywhere. + cut = MTU; + } + + // split the string + tString beginning = message.SubStr( 0, cut ) + "0xffffff"; + tString rest = message.SubStr( cut ); + + // and send the bits + sn_ConsoleOutRaw( beginning, client ); + sn_ConsoleOutString( rest, client ); +} + +void sn_ConsoleOut(const tOutput& o,int client){ + // transform message to string + tString message( o ); + sn_ConsoleOutString( message, client ); +} + static void client_cen_handler(nMessage &m){ if (sn_GetNetState()!=nSERVER){ tString s; Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-03-20 16:44:28 UTC (rev 8375) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-03-20 17:08:08 UTC (rev 8376) @@ -620,7 +620,7 @@ // causes the connected clients to print a message void sn_ConsoleOut(const tOutput &message,int client=-1); -nMessage* sn_ConsoleOutMessage(const tOutput &message); +nMessage* sn_ConsoleOutMessage( tString const & message ); // causes the connected clients to print a message in the center of the screeen void sn_CenterMessage(const tOutput &message,int client=-1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |