[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