[Orxonox-commit 5774] r10434 - in code/branches/multiplayerFS15/src/libraries/network: . packet

frovelli at orxonox.net frovelli at orxonox.net
Thu May 7 17:21:46 CEST 2015


Author: frovelli
Date: 2015-05-07 17:21:45 +0200 (Thu, 07 May 2015)
New Revision: 10434

Modified:
   code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.cc
   code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.h
   code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.cc
   code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.h
   code/branches/multiplayerFS15/src/libraries/network/MasterServer.cc
   code/branches/multiplayerFS15/src/libraries/network/MasterServer.h
   code/branches/multiplayerFS15/src/libraries/network/Server.cc
   code/branches/multiplayerFS15/src/libraries/network/ServerList.cc
   code/branches/multiplayerFS15/src/libraries/network/ServerList.h
   code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.cc
   code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.h
   code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.cc
   code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.h
   code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.cc
   code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.h
Log:
Implemented playercount in multiplayer lobby

Modified: code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -56,10 +56,10 @@
 
   void LANDiscoverable::setConfigValues()
   {
-    /* update msaddress string from orxonox.ini config file, if it
+    /* update ownName string from orxonox.ini config file, if it
      * has changed.
      */
-    SetConfigValueExternal(ownName, "WANDiscovery", "ownName", "tme213");
+    SetConfigValueExternal(ownName, "Discovery", "ownName", "tme213");
   }
 
   LANDiscoverable::~LANDiscoverable()
@@ -119,6 +119,7 @@
             orxout(internal_info, context::network) << "Received LAN discovery message from client " << event.peer->host->receivedAddress << endl;
             packet::ServerInformation info;
             info.setServerName(this->ownName);
+            info.setClientNumber(this->clientNumber);
             info.send(event.peer);
 //             ENetPacket* packet = enet_packet_create( LAN_DISCOVERY_ACK, strlen(LAN_DISCOVERY_ACK)+1, ENET_PACKET_FLAG_RELIABLE );
 //             enet_peer_send(event.peer, 0, packet );

Modified: code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/LANDiscoverable.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -42,6 +42,8 @@
       virtual ~LANDiscoverable();
       void setActivity( bool bActive );
       void update();
+      void updateClientNumber(int clientNumber) {this->clientNumber = clientNumber;}
+;
       /** Function used for the configuration file parameter update */
       void setConfigValues();
 
@@ -49,6 +51,7 @@
       bool            bActive_;
       ENetHost*       host_;
       std::string     ownName;
+      int clientNumber;
   };
 
 }

Modified: code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -88,7 +88,7 @@
         case ENET_EVENT_TYPE_RECEIVE:
           {
             packet::ServerInformation info(&event);
-            orxout(internal_info, context::network) << "Received LAN discovery server information; Name: " << info.getServerName() << ", Address: " << info.getServerIP() << ", RTT: " << info.getServerRTT() << endl;
+            orxout(internal_info, context::network) << "Received LAN discovery server information; Name: " << info.getServerName() << ", Address: " << info.getServerIP() << ", Players: " << info.getClientNumber() << ", RTT: " << info.getServerRTT() << endl;
             std::vector<packet::ServerInformation>::iterator it;
             for( it=this->servers_.begin(); it!=this->servers_.end(); ++it )
             {
@@ -131,8 +131,15 @@
       uint32_t serverrtt = this->servers_[index].getServerRTT();
       return Ogre::StringConverter::toString(serverrtt);
     }
+  }
 
+  std::string LANDiscovery::getServerListItemPlayerNumber(unsigned int index)
+  {
+    if( index >= this->servers_.size() )
+      return BLANKSTRING;
+    else{
+      int playerNumber = this->servers_[index].getClientNumber();
+      return Ogre::StringConverter::toString(playerNumber);
+    }
   }
-
-
 } // namespace orxonox

Modified: code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/LANDiscovery.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -52,6 +52,7 @@
       std::string getServerListItemName( unsigned int index ); // tolua_export
       std::string getServerListItemIP( unsigned int index ); // tolua_export
       std::string getServerListItemRTT( unsigned int index ); // tolua_export
+      std::string getServerListItemPlayerNumber( unsigned int index ); // tolua_export
       static LANDiscovery& getInstance(){ return Singleton<LANDiscovery>::getInstance(); } // tolua_export
 
     private:

Modified: code/branches/multiplayerFS15/src/libraries/network/MasterServer.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/MasterServer.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/MasterServer.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -126,14 +126,14 @@
     {
       /* send this particular server */
       /* build reply string */
-      int packetlen = MSPROTO_SERVERLIST_ITEM_LEN + 1 + (*i).ServerInfo.getServerIP().length() + 1 + (*i).ServerInfo.getServerName().length() + 1;
+      int packetlen = MSPROTO_SERVERLIST_ITEM_LEN + 1 + (*i).ServerInfo.getServerIP().length() + 1 + (*i).ServerInfo.getServerName().length() + 1 + sizeof((*i).ServerInfo.getClientNumber()) + 1;
       char *tosend = (char *)calloc(packetlen ,1 );
       if( !tosend )
       { orxout(internal_warning, context::master_server) << "Masterserver.cc: Memory allocation failed." << endl;
         continue;
       }
-      sprintf( tosend, "%s %s %s", MSPROTO_SERVERLIST_ITEM,
-          (*i).ServerInfo.getServerIP().c_str(), (*i).ServerInfo.getServerName().c_str());
+      sprintf( tosend, "%s %s %s %u", MSPROTO_SERVERLIST_ITEM,
+          (*i).ServerInfo.getServerIP().c_str(), (*i).ServerInfo.getServerName().c_str(), (*i).ServerInfo.getClientNumber());
 
       /* create packet from it */
       reply = enet_packet_create( tosend,
@@ -299,6 +299,7 @@
         /* tell the user */
         orxout(internal_info, context::master_server) << "Removed server " << ip << " from list." << endl;
       }
+      /* TODO add hook for disconnect here */
 
       else if( !strncmp( (char *)event->packet->data
         + MSPROTO_GAME_SERVER_LEN+1,
@@ -316,7 +317,21 @@
         orxout(internal_info, context::master_server) << "Updated server " << ip << " with new name " << name << endl;
       }
 
-      /* TODO add hook for disconnect here */
+      else if( !strncmp( (char *)event->packet->data
+        + MSPROTO_GAME_SERVER_LEN+1,
+        MSPROTO_SET_CLIENTS, MSPROTO_SET_CLIENTS_LEN ) )
+      {
+        /* create string from peer data */
+        std::string ip = std::string( addrconv );
+        std::string data (event->packet->data,event->packet->data + event->packet->dataLength );
+        std::string textform= data.substr(MSPROTO_GAME_SERVER_LEN + 1 + MSPROTO_SET_CLIENTS_LEN + 1);
+        int clientNumber = Ogre::StringConverter::parseInt(textform);
+
+        this->mainlist.setClientsByAddress( ip, clientNumber);
+
+        /* tell the user */
+        orxout(internal_info, context::master_server) << "Updated server " << ip << " with new client number " << clientNumber << endl;
+      }
     }
     else if( !strncmp( (char *)event->packet->data, MSPROTO_CLIENT,
       MSPROTO_CLIENT_LEN) )

Modified: code/branches/multiplayerFS15/src/libraries/network/MasterServer.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/MasterServer.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/MasterServer.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -48,7 +48,10 @@
 /* c compatibility */
 #include <cstdio>
 
-namespace orxonox 
+#include <OgreStringConverter.h>
+
+
+namespace orxonox
 {
   /* singleton */
   class _NetworkExport MasterServer
@@ -62,11 +65,11 @@
 
       /* static pointer for commands */
       static MasterServer *instance;
-      static MasterServer *getInstance() 
+      static MasterServer *getInstance()
         { return instance; }
-      static void setInstance( MasterServer *setto ) 
+      static void setInstance( MasterServer *setto )
         { instance = setto;  }
-      
+
       /* functions for commands */
       static void listServers( void );
       static void delServer( std::string todeladdr );

Modified: code/branches/multiplayerFS15/src/libraries/network/Server.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/Server.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/Server.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -113,9 +113,11 @@
 
     /* make discoverable on LAN */
     LANDiscoverable::setActivity(true);
+    LANDiscoverable::updateClientNumber(0);
 
     /* make discoverable on WAN */
     WANDiscoverable::setActivity(true);
+    WANDiscoverable::updateClientNumber(0);
 
     /* done */
     return;
@@ -288,12 +290,16 @@
 
     // inform all the listeners
     this->clientIDs_.push_back(peerID);
+    WANDiscoverable::updateClientNumber(this->clientIDs_.size());
+    LANDiscoverable::updateClientNumber(this->clientIDs_.size());
+
     ClientConnectionListener::broadcastClientConnected(peerID);
     GamestateManager::addPeer(peerID);
 
 //     ++newid;
 
     orxout(internal_info, context::network) << "Server: added client id: " << peerID << endl;
+
     createClient(peerID);
 }
 
@@ -314,6 +320,9 @@
       break;
     }
   }
+  WANDiscoverable::updateClientNumber(this->clientIDs_.size());
+  LANDiscoverable::updateClientNumber(this->clientIDs_.size());
+
   ClientConnectionListener::broadcastClientDisconnected(peerID);
   GamestateManager::removePeer(peerID);
       //ServerConnection::disconnectClient( client );

Modified: code/branches/multiplayerFS15/src/libraries/network/ServerList.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/ServerList.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/ServerList.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -158,4 +158,18 @@
     return false;
   };
 
+  bool ServerList::setClientsByAddress( std::string address, int clientNumber ){
+    /* get an iterator */
+    std::list<ServerListElem>::iterator i;
+
+    /* loop through list elements */
+    for( i = serverlist.begin(); i != serverlist.end(); ++i )
+      if( (*i).ServerInfo.getServerIP() == address )
+      { /* found this adress, rename and quit */
+        (*i).ServerInfo.setClientNumber( clientNumber );
+        return true;
+      }
+    return false;
+  };
+
 }

Modified: code/branches/multiplayerFS15/src/libraries/network/ServerList.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/ServerList.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/ServerList.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -93,6 +93,8 @@
 
       bool setNameByAddress( std::string address, std::string name  );
 
+      bool setClientsByAddress( std::string address, int clientNumber );
+
       /* SEARCHING */
       /* \param address The address of the server that is to be
        *  found

Modified: code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -57,8 +57,8 @@
     /* update msaddress string from orxonox.ini config file, if it
      * has changed.
      */
-    SetConfigValueExternal(msaddress, "WANDiscovery", "msaddress", "orxonox.net");
-    SetConfigValueExternal(ownName, "WANDiscovery", "ownName", "tme213");
+    SetConfigValueExternal(msaddress, "Discovery", "msaddress", "orxonox.net");
+    SetConfigValueExternal(ownName, "Discovery", "ownName", "tme213");
 //     SetConfigValue( msaddress, "orxonox.net");
   }
 
@@ -105,14 +105,13 @@
     /* debugging output */
     orxout(verbose, context::master_server) << "Initialization of WANDiscoverable complete." << endl;
 
+    // Now register the server at the master server
+    this->msc.sendRequest( MSPROTO_GAME_SERVER " " MSPROTO_REGISTER_SERVER );
+
     std::string request = MSPROTO_GAME_SERVER " " MSPROTO_SET_NAME " ";
     request += this->ownName;
-
-    // Now register the server at the master server
-    this->msc.sendRequest( MSPROTO_GAME_SERVER " " MSPROTO_REGISTER_SERVER );
     this->msc.sendRequest( request );
 
-
     return true;
   }
 
@@ -122,7 +121,18 @@
     msc.disconnect();
   }
 
+  void WANDiscoverable::updateClientNumber(int clientNumber)
+  {
+    orxout(verbose, context::master_server) << "Sending new number of clients: " << clientNumber << endl;
+    std::string request = MSPROTO_GAME_SERVER " " MSPROTO_SET_CLIENTS " ";
+    std::stringstream ss;
+    ss << clientNumber;
+    request +=  ss.str();
 
+    this->msc.sendRequest( request );
+  }
 
 
+
+
 } // namespace orxonox

Modified: code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/WANDiscoverable.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -57,6 +57,8 @@
       /** Function used to set the activity/discoverability */
       void setActivity( bool bActive );
 
+      void updateClientNumber(int clientNumber);
+
       /** Master server communications object */
       MasterServerComm msc;
 

Modified: code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -95,8 +95,12 @@
       std::string datastr = std::string((char*)ev->packet->data + MSPROTO_SERVERLIST_ITEM_LEN+1);
       int separator = datastr.find(" ");
       toadd.setServerIP(datastr.substr(0,separator));
-      toadd.setServerName(datastr.substr(separator+1));
+      int secondsep = datastr.find(" ", separator + 1);
+      toadd.setServerName(datastr.substr(separator + 1, secondsep - separator - 1));
+      toadd.setClientNumber(Ogre::StringConverter::parseInt(datastr.substr(secondsep+1)));
 
+      orxout(internal_info, context::network) << "Received WAN discovery server information; Name: " << toadd.getServerName() << ", Address: " << toadd.getServerIP() << ", Players: " << toadd.getClientNumber() << ", RTT: " << toadd.getServerRTT() << endl;
+
       /* add to list */
       this->servers_.push_back( toadd );
     }
@@ -168,5 +172,14 @@
     }
 
   }
+  std::string WANDiscovery::getServerListItemPlayerNumber(unsigned int index)
+  {
+    if( index >= this->servers_.size() )
+      return BLANKSTRING;
+    else{
+      int playerNumber = this->servers_[index].getClientNumber();
+      return Ogre::StringConverter::toString(playerNumber);
+    }
+  }
 
 } // namespace orxonox

Modified: code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/WANDiscovery.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -86,6 +86,13 @@
        */
       std::string getServerListItemRTT( unsigned int index ); // tolua_export
 
+      /** \param index Index to get the RTT of
+       * \return The number of players on the server
+       *
+       * Get the number of players on the server
+       */
+      std::string getServerListItemPlayerNumber( unsigned int index ); // tolua_export
+
       /* todo: might make this private and use getter/setter methods
        * at some later time.
        */

Modified: code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.cc
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.cc	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.cc	2015-05-07 15:21:45 UTC (rev 10434)
@@ -41,7 +41,6 @@
 
     ServerInformation::ServerInformation()
     {
-
     }
 
     ServerInformation::ServerInformation(ENetEvent* event)

Modified: code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.h
===================================================================
--- code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.h	2015-05-07 15:01:38 UTC (rev 10433)
+++ code/branches/multiplayerFS15/src/libraries/network/packet/ServerInformation.h	2015-05-07 15:21:45 UTC (rev 10434)
@@ -50,12 +50,15 @@
         std::string   getServerName() { return this->serverName_; }
         void          setServerIP( std::string IP ) { this->serverIP_ = IP; }
         std::string   getServerIP() { return this->serverIP_; }
+        void          setClientNumber( int clientNumber ) { this->clientNumber_ = clientNumber; }
+        int           getClientNumber() { return this->clientNumber_; }
         uint32_t      getServerRTT() { return this->serverRTT_; }
 
       private:
         std::string   serverName_;
         std::string   serverIP_;
         uint32_t      serverRTT_;
+        int           clientNumber_;
     };
 
   }




More information about the Orxonox-commit mailing list