2010-05-09 23:23:13 +02:00
// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2010- by Titus Tscharntke
//
// You can redistribute this code 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
// ==============================================================
# include "menu_state_masterserver.h"
# include "renderer.h"
# include "sound_renderer.h"
# include "core_data.h"
# include "config.h"
# include "menu_state_connected_game.h"
2010-05-15 20:40:58 +02:00
# include "menu_state_custom_game.h"
2010-05-09 23:23:13 +02:00
# include "menu_state_root.h"
# include "metrics.h"
# include "network_manager.h"
# include "network_message.h"
# include "auto_test.h"
# include "socket.h"
# include "masterserver_info.h"
2010-05-11 07:39:00 +02:00
# include <curl/curl.h>
2010-05-09 23:23:13 +02:00
# include "leak_dumper.h"
namespace Glest { namespace Game {
2010-05-16 05:31:12 +02:00
DisplayMessageFunction MenuStateMasterserver : : pCB_DisplayMessage = NULL ;
2010-05-09 23:23:13 +02:00
// =====================================================
// class ServerLine
// =====================================================
ServerLine : : ServerLine ( MasterServerInfo * mServerInfo , int lineIndex )
{
Lang & lang = Lang : : getInstance ( ) ;
index = lineIndex ;
int lineOffset = 25 * lineIndex ;
masterServerInfo = mServerInfo ;
2010-05-13 02:42:49 +02:00
int i = 10 ;
2010-05-09 23:23:13 +02:00
int startOffset = 650 ;
//general info:
i + = 10 ;
glestVersionLabel . init ( i , startOffset - lineOffset ) ;
glestVersionLabel . setText ( masterServerInfo - > getGlestVersion ( ) ) ;
i + = 80 ;
platformLabel . init ( i , startOffset - lineOffset ) ;
platformLabel . setText ( masterServerInfo - > getPlatform ( ) ) ;
i + = 50 ;
binaryCompileDateLabel . init ( i , startOffset - lineOffset ) ;
binaryCompileDateLabel . setText ( masterServerInfo - > getBinaryCompileDate ( ) ) ;
//game info:
2010-05-13 02:42:49 +02:00
i + = 130 ;
2010-05-09 23:23:13 +02:00
serverTitleLabel . init ( i , startOffset - lineOffset ) ;
serverTitleLabel . setText ( masterServerInfo - > getServerTitle ( ) ) ;
2010-05-13 02:42:49 +02:00
i + = 160 ;
2010-05-09 23:23:13 +02:00
ipAddressLabel . init ( i , startOffset - lineOffset ) ;
ipAddressLabel . setText ( masterServerInfo - > getIpAddress ( ) ) ;
//game setup info:
2010-05-15 20:40:58 +02:00
i + = 100 ;
2010-05-09 23:23:13 +02:00
techLabel . init ( i , startOffset - lineOffset ) ;
techLabel . setText ( masterServerInfo - > getTech ( ) ) ;
i + = 100 ;
mapLabel . init ( i , startOffset - lineOffset ) ;
mapLabel . setText ( masterServerInfo - > getMap ( ) ) ;
i + = 100 ;
tilesetLabel . init ( i , startOffset - lineOffset ) ;
tilesetLabel . setText ( masterServerInfo - > getTileset ( ) ) ;
i + = 100 ;
activeSlotsLabel . init ( i , startOffset - lineOffset ) ;
activeSlotsLabel . setText ( intToStr ( masterServerInfo - > getActiveSlots ( ) ) + " / " + intToStr ( masterServerInfo - > getNetworkSlots ( ) ) + " / " + intToStr ( masterServerInfo - > getConnectedClients ( ) ) ) ;
i + = 50 ;
selectButton . init ( i , startOffset - lineOffset , 30 ) ;
selectButton . setText ( " > " ) ;
2010-05-20 01:23:42 +02:00
if ( glestVersionString ! = masterServerInfo - > getGlestVersion ( ) )
{
selectButton . setEnabled ( false ) ;
selectButton . setEditable ( false ) ;
}
2010-05-09 23:23:13 +02:00
}
ServerLine : : ~ ServerLine ( ) {
delete masterServerInfo ;
}
bool ServerLine : : buttonMouseClick ( int x , int y ) {
return selectButton . mouseClick ( x , y ) ;
}
bool ServerLine : : buttonMouseMove ( int x , int y ) {
return selectButton . mouseMove ( x , y ) ;
}
void ServerLine : : render ( ) {
Renderer & renderer = Renderer : : getInstance ( ) ;
renderer . renderButton ( & selectButton ) ;
//general info:
renderer . renderLabel ( & glestVersionLabel ) ;
renderer . renderLabel ( & platformLabel ) ;
renderer . renderLabel ( & binaryCompileDateLabel ) ;
//game info:
renderer . renderLabel ( & serverTitleLabel ) ;
renderer . renderLabel ( & ipAddressLabel ) ;
//game setup info:
renderer . renderLabel ( & techLabel ) ;
renderer . renderLabel ( & mapLabel ) ;
renderer . renderLabel ( & tilesetLabel ) ;
renderer . renderLabel ( & activeSlotsLabel ) ;
}
// =====================================================
// class MenuStateMasterserver
// =====================================================
MenuStateMasterserver : : MenuStateMasterserver ( Program * program , MainMenu * mainMenu ) :
2010-05-16 18:40:21 +02:00
MenuState ( program , mainMenu , " masterserver " )
2010-05-09 23:23:13 +02:00
{
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
Lang & lang = Lang : : getInstance ( ) ;
2010-05-15 20:40:58 +02:00
autoRefreshTime = 0 ;
2010-05-16 18:40:21 +02:00
playServerFoundSound = false ;
2010-05-09 23:23:13 +02:00
mainMessageBox . init ( lang . get ( " Ok " ) ) ;
mainMessageBox . setEnabled ( false ) ;
mainMessageBoxState = 0 ;
2010-05-17 01:03:22 +02:00
lastRefreshTimer = time ( NULL ) ;
2010-05-09 23:23:13 +02:00
// header
labelTitle . init ( 330 , 700 ) ;
2010-05-13 09:22:33 +02:00
labelTitle . setText ( lang . get ( " AvailableServers " ) ) ;
2010-05-09 23:23:13 +02:00
2010-05-15 20:49:45 +02:00
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) = = " " ) {
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) ) ;
}
2010-05-15 20:40:58 +02:00
// bottom
buttonReturn . init ( 50 , 70 , 150 ) ;
buttonCreateGame . init ( 300 , 70 , 150 ) ;
buttonRefresh . init ( 550 , 70 , 150 ) ;
2010-05-09 23:23:13 +02:00
2010-05-13 09:22:33 +02:00
buttonRefresh . setText ( lang . get ( " RefreshList " ) ) ;
2010-05-09 23:23:13 +02:00
buttonReturn . setText ( lang . get ( " Return " ) ) ;
2010-05-15 20:40:58 +02:00
buttonCreateGame . setText ( lang . get ( " CustomGame " ) ) ;
labelAutoRefresh . setText ( lang . get ( " AutoRefreshRate " ) ) ;
labelAutoRefresh . init ( 800 , 100 ) ;
listBoxAutoRefresh . init ( 800 , 70 ) ;
2010-05-16 18:40:21 +02:00
listBoxAutoRefresh . pushBackItem ( lang . get ( " Off " ) ) ;
listBoxAutoRefresh . pushBackItem ( " 10 s " ) ;
listBoxAutoRefresh . pushBackItem ( " 20 s " ) ;
listBoxAutoRefresh . pushBackItem ( " 30 s " ) ;
2010-05-15 20:40:58 +02:00
listBoxAutoRefresh . setSelectedItemIndex ( 0 ) ;
2010-05-09 23:23:13 +02:00
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
NetworkManager : : getInstance ( ) . end ( ) ;
NetworkManager : : getInstance ( ) . init ( nrClient ) ;
2010-05-13 08:43:56 +02:00
//updateServerInfo();
needUpdateFromServer = true ;
updateFromMasterserverThread = new SimpleTaskThread ( this , 0 , 100 ) ;
2010-06-18 20:47:20 +02:00
updateFromMasterserverThread - > setUniqueID ( __FILE__ ) ;
2010-05-13 08:43:56 +02:00
updateFromMasterserverThread - > start ( ) ;
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
MenuStateMasterserver : : ~ MenuStateMasterserver ( ) {
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-06-18 20:47:20 +02:00
if ( updateFromMasterserverThread ! = NULL ) {
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
needUpdateFromServer = false ;
safeMutex . ReleaseLock ( ) ;
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
delete updateFromMasterserverThread ;
updateFromMasterserverThread = NULL ;
}
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-13 09:24:59 +02:00
2010-06-18 20:47:20 +02:00
clearServerLines ( ) ;
2010-06-11 05:17:38 +02:00
2010-06-23 16:49:20 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] END \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
void MenuStateMasterserver : : clearServerLines ( ) {
while ( ! serverLines . empty ( ) ) {
delete serverLines . back ( ) ;
serverLines . pop_back ( ) ;
}
}
void MenuStateMasterserver : : mouseClick ( int x , int y , MouseButton mouseButton ) {
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
CoreData & coreData = CoreData : : getInstance ( ) ;
SoundRenderer & soundRenderer = SoundRenderer : : getInstance ( ) ;
if ( mainMessageBox . getEnabled ( ) ) {
int button = 1 ;
if ( mainMessageBox . mouseClick ( x , y , button ) )
{
soundRenderer . playFx ( coreData . getClickSoundA ( ) ) ;
if ( button = = 1 )
{
mainMessageBox . setEnabled ( false ) ;
}
}
}
else if ( buttonRefresh . mouseClick ( x , y ) ) {
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-09 23:23:13 +02:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2010-05-13 08:43:56 +02:00
//updateServerInfo();
needUpdateFromServer = true ;
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
else if ( buttonReturn . mouseClick ( x , y ) ) {
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-09 23:23:13 +02:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2010-05-13 09:24:59 +02:00
2010-06-18 19:09:42 +02:00
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
2010-06-18 01:24:15 +02:00
delete updateFromMasterserverThread ;
updateFromMasterserverThread = NULL ;
2010-06-11 05:17:38 +02:00
safeMutex . ReleaseLock ( ) ;
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
mainMenu - > setState ( new MenuStateRoot ( program , mainMenu ) ) ;
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
2010-05-15 20:40:58 +02:00
else if ( buttonCreateGame . mouseClick ( x , y ) ) {
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-15 20:40:58 +02:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2010-06-18 01:24:15 +02:00
needUpdateFromServer = false ;
2010-06-23 16:49:20 +02:00
safeMutex . ReleaseLock ( ) ;
2010-06-18 19:09:42 +02:00
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
2010-06-18 01:24:15 +02:00
delete updateFromMasterserverThread ;
updateFromMasterserverThread = NULL ;
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-16 18:40:21 +02:00
mainMenu - > setState ( new MenuStateCustomGame ( program , mainMenu , true , true ) ) ;
2010-06-18 01:24:15 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-15 20:40:58 +02:00
}
else if ( listBoxAutoRefresh . mouseClick ( x , y ) ) {
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-15 20:40:58 +02:00
soundRenderer . playFx ( coreData . getClickSoundA ( ) ) ;
autoRefreshTime = 10 * listBoxAutoRefresh . getSelectedItemIndex ( ) ;
}
2010-06-11 05:17:38 +02:00
else {
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-09 23:23:13 +02:00
for ( int i = 0 ; i < serverLines . size ( ) ; + + i ) {
2010-06-18 20:47:20 +02:00
if ( serverLines [ i ] - > buttonMouseClick ( x , y ) ) {
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2010-06-11 05:17:38 +02:00
string connectServerIP = serverLines [ i ] - > getMasterServerInfo ( ) - > getIpAddress ( ) ;
connectToServer ( connectServerIP ) ;
2010-06-18 20:47:20 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
safeMutex . ReleaseLock ( ) ;
BaseThread : : shutdownAndWait ( updateFromMasterserverThread ) ;
delete updateFromMasterserverThread ;
updateFromMasterserverThread = NULL ;
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
mainMenu - > setState ( new MenuStateConnectedGame ( program , mainMenu , jmMasterserver ) ) ;
2010-05-09 23:23:13 +02:00
break ;
}
}
}
}
void MenuStateMasterserver : : mouseMove ( int x , int y , const MouseState * ms ) {
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-09 23:23:13 +02:00
if ( mainMessageBox . getEnabled ( ) ) {
mainMessageBox . mouseMove ( x , y ) ;
}
buttonRefresh . mouseMove ( x , y ) ;
buttonReturn . mouseMove ( x , y ) ;
2010-05-15 20:40:58 +02:00
buttonCreateGame . mouseMove ( x , y ) ;
listBoxAutoRefresh . mouseMove ( x , y ) ;
2010-05-09 23:23:13 +02:00
for ( int i = 0 ; i < serverLines . size ( ) ; + + i ) {
serverLines [ i ] - > buttonMouseMove ( x , y ) ;
}
}
void MenuStateMasterserver : : render ( ) {
Renderer & renderer = Renderer : : getInstance ( ) ;
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-09 23:23:13 +02:00
if ( mainMessageBox . getEnabled ( ) ) {
renderer . renderMessageBox ( & mainMessageBox ) ;
}
else
{
renderer . renderButton ( & buttonRefresh ) ;
renderer . renderButton ( & buttonReturn ) ;
renderer . renderLabel ( & labelTitle ) ;
2010-05-15 20:40:58 +02:00
renderer . renderLabel ( & labelAutoRefresh ) ;
renderer . renderButton ( & buttonCreateGame ) ;
renderer . renderListBox ( & listBoxAutoRefresh ) ;
2010-05-09 23:23:13 +02:00
for ( int i = 0 ; i < serverLines . size ( ) ; + + i ) {
serverLines [ i ] - > render ( ) ;
}
}
}
void MenuStateMasterserver : : update ( ) {
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-16 05:31:12 +02:00
if ( autoRefreshTime ! = 0 & & difftime ( time ( NULL ) , lastRefreshTimer ) > = autoRefreshTime ) {
2010-06-18 01:24:15 +02:00
needUpdateFromServer = true ;
lastRefreshTimer = time ( NULL ) ;
2010-05-16 05:31:12 +02:00
}
2010-05-16 18:40:21 +02:00
if ( playServerFoundSound )
{
SoundRenderer : : getInstance ( ) . playFx ( CoreData : : getInstance ( ) . getAttentionSound ( ) ) ;
playServerFoundSound = false ;
}
2010-05-16 05:31:12 +02:00
if ( threadedErrorMsg ! = " " ) {
std : : string sError = threadedErrorMsg ;
threadedErrorMsg = " " ;
if ( pCB_DisplayMessage ! = NULL ) {
pCB_DisplayMessage ( sError . c_str ( ) , false ) ;
2010-05-15 20:40:58 +02:00
}
2010-05-16 05:31:12 +02:00
else {
throw runtime_error ( sError . c_str ( ) ) ;
}
}
2010-05-09 23:23:13 +02:00
}
2010-05-13 08:43:56 +02:00
void MenuStateMasterserver : : simpleTask ( ) {
2010-06-18 20:47:20 +02:00
if ( updateFromMasterserverThread = = NULL | |
updateFromMasterserverThread - > getQuitStatus ( ) = = true ) {
return ;
}
2010-06-11 05:17:38 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
2010-05-13 08:43:56 +02:00
if ( needUpdateFromServer = = true ) {
updateServerInfo ( ) ;
}
}
2010-05-11 07:39:00 +02:00
void MenuStateMasterserver : : updateServerInfo ( ) {
2010-05-15 20:49:45 +02:00
try {
needUpdateFromServer = false ;
2010-05-16 18:40:21 +02:00
int numberOfOldServerLines = serverLines . size ( ) ;
2010-05-15 20:49:45 +02:00
clearServerLines ( ) ;
2010-05-16 18:40:21 +02:00
2010-05-15 20:49:45 +02:00
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) ! = " " ) {
std : : string serverInfo = SystemFlags : : getHTTP ( Config : : getInstance ( ) . getString ( " Masterserver " ) + " showServersForGlest.php " ) ;
std : : vector < std : : string > serverList ;
Tokenize ( serverInfo , serverList , " \n " ) ;
for ( int i = 0 ; i < serverList . size ( ) ; i + + ) {
string & server = serverList [ i ] ;
std : : vector < std : : string > serverEntities ;
Tokenize ( server , serverEntities , " | " ) ;
const int MIN_FIELDS_EXPECTED = 11 ;
if ( serverEntities . size ( ) > = MIN_FIELDS_EXPECTED ) {
MasterServerInfo * masterServerInfo = new MasterServerInfo ( ) ;
//general info:
masterServerInfo - > setGlestVersion ( serverEntities [ 0 ] ) ;
masterServerInfo - > setPlatform ( serverEntities [ 1 ] ) ;
masterServerInfo - > setBinaryCompileDate ( serverEntities [ 2 ] ) ;
//game info:
masterServerInfo - > setServerTitle ( serverEntities [ 3 ] ) ;
masterServerInfo - > setIpAddress ( serverEntities [ 4 ] ) ;
//game setup info:
masterServerInfo - > setTech ( serverEntities [ 5 ] ) ;
masterServerInfo - > setMap ( serverEntities [ 6 ] ) ;
masterServerInfo - > setTileset ( serverEntities [ 7 ] ) ;
masterServerInfo - > setActiveSlots ( strToInt ( serverEntities [ 8 ] ) ) ;
masterServerInfo - > setNetworkSlots ( strToInt ( serverEntities [ 9 ] ) ) ;
masterServerInfo - > setConnectedClients ( strToInt ( serverEntities [ 10 ] ) ) ;
2010-06-04 21:42:58 +02:00
//printf("Getting Ping time for host %s\n",masterServerInfo->getIpAddress().c_str());
float pingTime = Socket : : getAveragePingMS ( masterServerInfo - > getIpAddress ( ) . c_str ( ) , 1 ) ;
//printf("Ping time = %f\n",pingTime);
char szBuf [ 1024 ] = " " ;
2010-06-04 22:52:32 +02:00
sprintf ( szBuf , " %s, %.2fms " , masterServerInfo - > getServerTitle ( ) . c_str ( ) , pingTime ) ;
2010-06-04 21:42:58 +02:00
masterServerInfo - > setServerTitle ( szBuf ) ;
2010-05-15 20:49:45 +02:00
serverLines . push_back ( new ServerLine ( masterServerInfo , i ) ) ;
}
}
2010-05-11 07:39:00 +02:00
}
2010-05-16 18:40:21 +02:00
if ( serverLines . size ( ) > numberOfOldServerLines )
{
playServerFoundSound = true ;
}
2010-05-15 20:49:45 +02:00
}
catch ( const exception & e ) {
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] Line: %d, error [%s] \n " , __FILE__ , __FUNCTION__ , __LINE__ , e . what ( ) ) ;
2010-05-16 05:31:12 +02:00
threadedErrorMsg = e . what ( ) ;
2010-05-15 20:49:45 +02:00
}
2010-05-09 23:23:13 +02:00
}
2010-06-18 20:47:20 +02:00
bool MenuStateMasterserver : : connectToServer ( string ipString )
2010-05-09 23:23:13 +02:00
{
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] START ipString='%s' \n " , __FILE__ , __FUNCTION__ , ipString . c_str ( ) ) ;
ClientInterface * clientInterface = NetworkManager : : getInstance ( ) . getClientInterface ( ) ;
Config & config = Config : : getInstance ( ) ;
Ip serverIp ( ipString ) ;
2010-05-17 22:41:18 +02:00
int serverPort = Config : : getInstance ( ) . getInt ( " ServerPort " , intToStr ( GameConstants : : serverPort ) . c_str ( ) ) ;
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] try to connect to [%s] serverPort = %d \n " , __FILE__ , __FUNCTION__ , serverIp . getString ( ) . c_str ( ) , serverPort ) ;
clientInterface - > connect ( serverIp , serverPort ) ;
2010-05-09 23:23:13 +02:00
if ( ! clientInterface - > isConnected ( ) )
{
NetworkManager : : getInstance ( ) . end ( ) ;
NetworkManager : : getInstance ( ) . init ( nrClient ) ;
mainMessageBoxState = 1 ;
Lang & lang = Lang : : getInstance ( ) ;
showMessageBox ( lang . get ( " Couldnt connect " ) , lang . get ( " Connection failed " ) , false ) ;
2010-06-18 20:47:20 +02:00
return false ;
2010-05-09 23:23:13 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] connection failed \n " , __FILE__ , __FUNCTION__ ) ;
}
else
{
2010-06-18 20:47:20 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] connected to [%s] \n " , __FILE__ , __FUNCTION__ , serverIp . getString ( ) . c_str ( ) ) ;
2010-05-09 23:23:13 +02:00
//save server ip
//config.setString("ServerIp", serverIp.getString());
//config.save();
2010-06-11 05:17:38 +02:00
2010-06-18 20:47:20 +02:00
return true ;
2010-05-09 23:23:13 +02:00
}
}
void MenuStateMasterserver : : showMessageBox ( const string & text , const string & header , bool toggle ) {
if ( ! toggle ) {
mainMessageBox . setEnabled ( false ) ;
}
if ( ! mainMessageBox . getEnabled ( ) ) {
mainMessageBox . setText ( text ) ;
mainMessageBox . setHeader ( header ) ;
mainMessageBox . setEnabled ( true ) ;
}
else {
mainMessageBox . setEnabled ( false ) ;
}
}
} } //end namespace