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
// =====================================================
2010-09-09 23:07:39 +02:00
ServerLine : : ServerLine ( MasterServerInfo * mServerInfo , int lineIndex , const char * containerName ) {
2010-10-10 08:35:50 +02:00
this - > containerName = containerName ;
2010-05-09 23:23:13 +02:00
Lang & lang = Lang : : getInstance ( ) ;
index = lineIndex ;
2010-10-23 11:06:47 +02:00
int lineOffset = 25 * lineIndex ;
masterServerInfo = * mServerInfo ;
2010-05-13 02:42:49 +02:00
int i = 10 ;
2010-10-13 21:16:04 +02:00
int startOffset = 600 ;
2010-05-09 23:23:13 +02:00
//general info:
i + = 10 ;
2010-09-09 08:42:39 +02:00
glestVersionLabel . registerGraphicComponent ( containerName , " glestVersionLabel " + intToStr ( lineIndex ) ) ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " glestVersionLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
glestVersionLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
glestVersionLabel . setText ( masterServerInfo . getGlestVersion ( ) ) ;
2010-10-10 08:35:50 +02:00
2010-05-09 23:23:13 +02:00
i + = 80 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " platformLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
platformLabel . registerGraphicComponent ( containerName , " platformLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
platformLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
platformLabel . setText ( masterServerInfo . getPlatform ( ) ) ;
2010-10-10 08:35:50 +02:00
2010-05-09 23:23:13 +02:00
i + = 50 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " binaryCompileDateLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
binaryCompileDateLabel . registerGraphicComponent ( containerName , " binaryCompileDateLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
binaryCompileDateLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
binaryCompileDateLabel . setText ( masterServerInfo . getBinaryCompileDate ( ) ) ;
2010-05-09 23:23:13 +02:00
//game info:
2010-05-13 02:42:49 +02:00
i + = 130 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " serverTitleLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
serverTitleLabel . registerGraphicComponent ( containerName , " serverTitleLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
serverTitleLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
serverTitleLabel . setText ( masterServerInfo . getServerTitle ( ) ) ;
2010-05-09 23:23:13 +02:00
2010-05-13 02:42:49 +02:00
i + = 160 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " ipAddressLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
ipAddressLabel . registerGraphicComponent ( containerName , " ipAddressLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
ipAddressLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
ipAddressLabel . setText ( masterServerInfo . getIpAddress ( ) ) ;
2010-05-09 23:23:13 +02:00
//game setup info:
2010-05-15 20:40:58 +02:00
i + = 100 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " techLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
techLabel . registerGraphicComponent ( containerName , " techLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
techLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
techLabel . setText ( masterServerInfo . getTech ( ) ) ;
2010-05-09 23:23:13 +02:00
i + = 100 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " mapLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
mapLabel . registerGraphicComponent ( containerName , " mapLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
mapLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
mapLabel . setText ( masterServerInfo . getMap ( ) ) ;
2010-05-09 23:23:13 +02:00
i + = 100 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " tilesetLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
tilesetLabel . registerGraphicComponent ( containerName , " tilesetLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
tilesetLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
tilesetLabel . setText ( masterServerInfo . getTileset ( ) ) ;
2010-05-09 23:23:13 +02:00
i + = 100 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " activeSlotsLabel " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
activeSlotsLabel . registerGraphicComponent ( containerName , " activeSlotsLabel " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
activeSlotsLabel . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
activeSlotsLabel . setText ( intToStr ( masterServerInfo . getActiveSlots ( ) ) + " / " + intToStr ( masterServerInfo . getNetworkSlots ( ) ) + " / " + intToStr ( masterServerInfo . getConnectedClients ( ) ) ) ;
2010-05-09 23:23:13 +02:00
2010-07-03 12:06:31 +02:00
i + = 50 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " externalConnectPort " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
externalConnectPort . registerGraphicComponent ( containerName , " externalConnectPort " + intToStr ( lineIndex ) ) ;
2010-07-03 12:06:31 +02:00
externalConnectPort . init ( i , startOffset - lineOffset ) ;
2010-10-23 11:06:47 +02:00
externalConnectPort . setText ( intToStr ( masterServerInfo . getExternalConnectPort ( ) ) ) ;
2010-07-03 12:06:31 +02:00
2010-05-09 23:23:13 +02:00
i + = 50 ;
2010-10-10 08:35:50 +02:00
registeredObjNameList . push_back ( " selectButton " + intToStr ( lineIndex ) ) ;
2010-09-09 08:42:39 +02:00
selectButton . registerGraphicComponent ( containerName , " selectButton " + intToStr ( lineIndex ) ) ;
2010-05-09 23:23:13 +02:00
selectButton . init ( i , startOffset - lineOffset , 30 ) ;
selectButton . setText ( " > " ) ;
2010-10-10 08:35:50 +02:00
2010-10-10 16:19:34 +02:00
//printf("glestVersionString [%s] masterServerInfo->getGlestVersion() [%s]\n",glestVersionString.c_str(),masterServerInfo->getGlestVersion().c_str());
2010-10-23 11:06:47 +02:00
bool compatible = checkVersionComptability ( glestVersionString , masterServerInfo . getGlestVersion ( ) ) ;
2010-10-15 19:27:00 +02:00
selectButton . setEnabled ( compatible ) ;
selectButton . setEditable ( compatible ) ;
2010-09-09 08:42:39 +02:00
2010-10-23 11:06:47 +02:00
registeredObjNameList . push_back ( " gameFull " + intToStr ( lineIndex ) ) ;
gameFull . registerGraphicComponent ( containerName , " gameFull " + intToStr ( lineIndex ) ) ;
gameFull . init ( i , startOffset - lineOffset ) ;
gameFull . setText ( lang . get ( " MGGameSlotsFull " ) ) ;
gameFull . setEnabled ( ! compatible ) ;
gameFull . setEditable ( ! compatible ) ;
2010-09-09 08:42:39 +02:00
GraphicComponent : : applyAllCustomProperties ( containerName ) ;
2010-05-09 23:23:13 +02:00
}
2010-10-10 08:35:50 +02:00
ServerLine : : ~ ServerLine ( ) {
GraphicComponent : : clearRegisterGraphicComponent ( containerName , registeredObjNameList ) ;
2010-10-23 11:06:47 +02:00
//delete masterServerInfo;
2010-05-09 23:23:13 +02:00
}
bool ServerLine : : buttonMouseClick ( int x , int y ) {
return selectButton . mouseClick ( x , y ) ;
}
bool ServerLine : : buttonMouseMove ( int x , int y ) {
return selectButton . mouseMove ( x , y ) ;
}
2010-10-23 11:06:47 +02:00
void ServerLine : : render ( ) {
2010-05-09 23:23:13 +02:00
Renderer & renderer = Renderer : : getInstance ( ) ;
2010-10-23 11:06:47 +02:00
bool joinEnabled = ( masterServerInfo . getNetworkSlots ( ) > masterServerInfo . getConnectedClients ( ) ) ;
if ( joinEnabled = = true ) {
selectButton . setEnabled ( true ) ;
selectButton . setVisible ( true ) ;
gameFull . setEnabled ( false ) ;
gameFull . setEditable ( false ) ;
renderer . renderButton ( & selectButton ) ;
}
else {
selectButton . setEnabled ( false ) ;
selectButton . setVisible ( false ) ;
gameFull . setEnabled ( true ) ;
gameFull . setEditable ( true ) ;
renderer . renderLabel ( & gameFull ) ;
}
2010-05-09 23:23:13 +02:00
//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 ) ;
2010-07-03 12:06:31 +02:00
renderer . renderLabel ( & activeSlotsLabel ) ;
renderer . renderLabel ( & externalConnectPort ) ;
2010-05-09 23:23:13 +02:00
}
// =====================================================
// 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-09-09 23:07:39 +02:00
containerName = " MasterServer " ;
2010-10-15 03:52:36 +02:00
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-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-10-06 22:54:08 +02:00
announcementLoaded = false ;
2010-09-09 08:42:39 +02:00
mainMessageBox . registerGraphicComponent ( containerName , " mainMessageBox " ) ;
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-10-06 22:54:08 +02:00
// announcement
announcementLabel . registerGraphicComponent ( containerName , " announcementLabel " ) ;
announcementLabel . init ( 10 , 730 ) ;
announcementLabel . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
announcementLabel . setText ( " " ) ;
2010-05-09 23:23:13 +02:00
2010-10-13 21:16:04 +02:00
// versionInfo
versionInfoLabel . registerGraphicComponent ( containerName , " versionInfoLabel " ) ;
versionInfoLabel . init ( 10 , 680 ) ;
versionInfoLabel . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
versionInfoLabel . setText ( " " ) ;
2010-05-09 23:23:13 +02:00
// header
2010-09-09 08:42:39 +02:00
labelTitle . registerGraphicComponent ( containerName , " labelTitle " ) ;
2010-10-13 21:16:04 +02:00
labelTitle . init ( 330 , 640 ) ;
2010-10-06 22:54:08 +02:00
labelTitle . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
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-10-06 22:54:08 +02:00
2010-05-15 20:40:58 +02:00
// bottom
2010-06-25 01:29:30 +02:00
int buttonPos = 130 ;
2010-09-09 08:42:39 +02:00
labelChatUrl . registerGraphicComponent ( containerName , " labelChatUrl " ) ;
2010-09-04 01:54:11 +02:00
labelChatUrl . init ( 150 , buttonPos - 50 ) ;
2010-06-25 01:29:30 +02:00
labelChatUrl . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
labelChatUrl . setText ( lang . get ( " NoServerVisitChat " ) + " : http://webchat.freenode.net/?channels=glest " ) ;
2010-10-23 11:06:47 +02:00
// Titles for current games - START
int lineIndex = 0 ;
int lineOffset = 25 * lineIndex ;
int i = 10 ;
int startOffset = 623 ;
//general info:
i + = 10 ;
glestVersionLabel . registerGraphicComponent ( containerName , " glestVersionLabel " ) ;
glestVersionLabel . init ( i , startOffset - lineOffset ) ;
glestVersionLabel . setText ( lang . get ( " MGVersion " ) ) ;
i + = 80 ;
platformLabel . registerGraphicComponent ( containerName , " platformLabel " ) ;
platformLabel . init ( i , startOffset - lineOffset ) ;
platformLabel . setText ( lang . get ( " MGPlatform " ) ) ;
i + = 50 ;
binaryCompileDateLabel . registerGraphicComponent ( containerName , " binaryCompileDateLabel " ) ;
binaryCompileDateLabel . init ( i , startOffset - lineOffset ) ;
binaryCompileDateLabel . setText ( lang . get ( " MGBuildDateTime " ) ) ;
//game info:
i + = 130 ;
serverTitleLabel . registerGraphicComponent ( containerName , " serverTitleLabel " ) ;
serverTitleLabel . init ( i , startOffset - lineOffset ) ;
serverTitleLabel . setText ( lang . get ( " MGGameTitle " ) ) ;
i + = 160 ;
ipAddressLabel . registerGraphicComponent ( containerName , " ipAddressLabel " ) ;
ipAddressLabel . init ( i , startOffset - lineOffset ) ;
ipAddressLabel . setText ( lang . get ( " MGGameIP " ) ) ;
//game setup info:
i + = 100 ;
techLabel . registerGraphicComponent ( containerName , " techLabel " ) ;
techLabel . init ( i , startOffset - lineOffset ) ;
techLabel . setText ( lang . get ( " TechTree " ) ) ;
i + = 100 ;
mapLabel . registerGraphicComponent ( containerName , " mapLabel " ) ;
mapLabel . init ( i , startOffset - lineOffset ) ;
mapLabel . setText ( lang . get ( " Map " ) ) ;
i + = 100 ;
tilesetLabel . registerGraphicComponent ( containerName , " tilesetLabel " ) ;
tilesetLabel . init ( i , startOffset - lineOffset ) ;
tilesetLabel . setText ( lang . get ( " Tileset " ) ) ;
i + = 100 ;
activeSlotsLabel . registerGraphicComponent ( containerName , " activeSlotsLabel " ) ;
activeSlotsLabel . init ( i , startOffset - lineOffset ) ;
activeSlotsLabel . setText ( lang . get ( " MGGameSlots " ) ) ;
i + = 50 ;
externalConnectPort . registerGraphicComponent ( containerName , " externalConnectPort " ) ;
externalConnectPort . init ( i , startOffset - lineOffset ) ;
externalConnectPort . setText ( lang . get ( " Port " ) ) ;
i + = 50 ;
selectButton . registerGraphicComponent ( containerName , " selectButton " ) ;
selectButton . init ( i , startOffset - lineOffset ) ;
selectButton . setText ( lang . get ( " MGJoinGameSlots " ) ) ;
// Titles for current games - END
2010-06-25 01:29:30 +02:00
2010-09-09 08:42:39 +02:00
buttonReturn . registerGraphicComponent ( containerName , " buttonReturn " ) ;
2010-06-25 01:29:30 +02:00
buttonReturn . init ( 50 , buttonPos , 150 ) ;
2010-09-09 08:42:39 +02:00
buttonCreateGame . registerGraphicComponent ( containerName , " buttonCreateGame " ) ;
2010-06-25 01:29:30 +02:00
buttonCreateGame . init ( 300 , buttonPos , 150 ) ;
2010-09-09 08:42:39 +02:00
buttonRefresh . registerGraphicComponent ( containerName , " buttonRefresh " ) ;
2010-06-25 01:29:30 +02:00
buttonRefresh . init ( 550 , buttonPos , 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 " ) ) ;
2010-09-09 08:42:39 +02:00
labelAutoRefresh . registerGraphicComponent ( containerName , " labelAutoRefresh " ) ;
2010-06-25 01:29:30 +02:00
labelAutoRefresh . init ( 800 , buttonPos + 30 ) ;
2010-09-09 08:42:39 +02:00
listBoxAutoRefresh . registerGraphicComponent ( containerName , " listBoxAutoRefresh " ) ;
2010-06-25 01:29:30 +02:00
listBoxAutoRefresh . init ( 800 , buttonPos ) ;
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-06-24 03:23:18 +02:00
listBoxAutoRefresh . setSelectedItemIndex ( 1 ) ;
2010-06-24 13:30:54 +02:00
autoRefreshTime = 10 * listBoxAutoRefresh . getSelectedItemIndex ( ) ;
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-09-04 01:54:11 +02:00
// write hint to console:
Config & configKeys = Config : : getInstance ( std : : pair < ConfigType , ConfigType > ( cfgMainKeys , cfgUserKeys ) ) ;
console . addLine ( lang . get ( " To switch off music press " ) + " - \" " + configKeys . getCharKey ( " ToggleMusic " ) + " \" " ) ;
2010-05-13 08:43:56 +02:00
2010-09-09 08:42:39 +02:00
GraphicComponent : : applyAllCustomProperties ( containerName ) ;
2010-10-30 19:31:57 +02:00
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
masterServerThreadInDeletion = false ;
2010-05-13 08:43:56 +02:00
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-10-30 19:31:57 +02:00
if ( masterServerThreadInDeletion = = false ) {
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
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);
masterServerThreadInDeletion = true ;
2010-12-05 02:52:38 +01:00
if ( updateFromMasterserverThread ! = NULL & &
updateFromMasterserverThread - > shutdownAndWait ( ) = = true ) {
delete updateFromMasterserverThread ;
}
2010-10-30 19:31:57 +02:00
updateFromMasterserverThread = NULL ;
masterServerThreadInDeletion = false ;
safeMutexPtr . ReleaseLock ( ) ;
}
else {
safeMutexPtr . ReleaseLock ( ) ;
}
2010-06-18 20:47:20 +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-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 ) )
2010-09-04 01:54:11 +02:00
{
2010-05-09 23:23:13 +02:00
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
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-10-30 19:31:57 +02:00
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
masterServerThreadInDeletion = true ;
2010-12-05 02:52:38 +01:00
if ( updateFromMasterserverThread ! = NULL & &
updateFromMasterserverThread - > shutdownAndWait ( ) = = true ) {
delete updateFromMasterserverThread ;
}
2010-06-18 01:24:15 +02:00
updateFromMasterserverThread = NULL ;
2010-10-30 19:31:57 +02:00
masterServerThreadInDeletion = false ;
safeMutexPtr . ReleaseLock ( ) ;
2010-06-18 01:24:15 +02:00
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-29 08:50:35 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
2010-06-18 19:09:42 +02:00
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
2010-10-30 19:31:57 +02:00
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
masterServerThreadInDeletion = true ;
2010-12-05 02:52:38 +01:00
if ( updateFromMasterserverThread ! = NULL & &
updateFromMasterserverThread - > shutdownAndWait ( ) = = true ) {
delete updateFromMasterserverThread ;
}
2010-06-18 01:24:15 +02:00
updateFromMasterserverThread = NULL ;
2010-10-30 19:31:57 +02:00
masterServerThreadInDeletion = false ;
safeMutexPtr . ReleaseLock ( ) ;
2010-06-18 01:24:15 +02:00
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 ( ) ;
2010-07-03 12:06:31 +02:00
int connectServerPort = serverLines [ i ] - > getMasterServerInfo ( ) - > getExternalConnectPort ( ) ;
connectToServer ( connectServerIP , connectServerPort ) ;
2010-06-18 20:47:20 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , __FILE__ , __FUNCTION__ , __LINE__ ) ;
safeMutex . ReleaseLock ( ) ;
2010-10-30 19:31:57 +02:00
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
masterServerThreadInDeletion = true ;
2010-12-05 02:52:38 +01:00
if ( updateFromMasterserverThread ! = NULL & &
updateFromMasterserverThread - > shutdownAndWait ( ) = = true ) {
delete updateFromMasterserverThread ;
}
2010-06-18 20:47:20 +02:00
updateFromMasterserverThread = NULL ;
2010-10-30 19:31:57 +02:00
masterServerThreadInDeletion = false ;
safeMutexPtr . ReleaseLock ( ) ;
2010-06-18 20:47:20 +02:00
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-10-23 11:06:47 +02:00
if ( mainMessageBox . getEnabled ( ) ) {
2010-05-09 23:23:13 +02:00
renderer . renderMessageBox ( & mainMessageBox ) ;
}
else
{
renderer . renderButton ( & buttonRefresh ) ;
renderer . renderButton ( & buttonReturn ) ;
2010-10-23 11:06:47 +02:00
renderer . renderLabel ( & labelTitle , & GREEN ) ;
renderer . renderLabel ( & announcementLabel , & YELLOW ) ;
2010-10-13 21:16:04 +02:00
renderer . renderLabel ( & versionInfoLabel ) ;
2010-10-23 11:06:47 +02:00
2010-05-15 20:40:58 +02:00
renderer . renderLabel ( & labelAutoRefresh ) ;
2010-06-25 01:29:30 +02:00
renderer . renderLabel ( & labelChatUrl ) ;
2010-05-15 20:40:58 +02:00
renderer . renderButton ( & buttonCreateGame ) ;
renderer . renderListBox ( & listBoxAutoRefresh ) ;
2010-10-23 11:06:47 +02:00
// Render titles for server games listed
const Vec4f titleLabelColor = CYAN ;
//general info:
renderer . renderLabel ( & glestVersionLabel , & titleLabelColor ) ;
renderer . renderLabel ( & platformLabel , & titleLabelColor ) ;
renderer . renderLabel ( & binaryCompileDateLabel , & titleLabelColor ) ;
//game info:
renderer . renderLabel ( & serverTitleLabel , & titleLabelColor ) ;
renderer . renderLabel ( & ipAddressLabel , & titleLabelColor ) ;
//game setup info:
renderer . renderLabel ( & techLabel , & titleLabelColor ) ;
renderer . renderLabel ( & mapLabel , & titleLabelColor ) ;
renderer . renderLabel ( & tilesetLabel , & titleLabelColor ) ;
renderer . renderLabel ( & activeSlotsLabel , & titleLabelColor ) ;
renderer . renderLabel ( & externalConnectPort , & titleLabelColor ) ;
renderer . renderLabel ( & selectButton , & titleLabelColor ) ;
2010-09-04 01:54:11 +02:00
// render console
renderer . renderConsole ( & console , false , false ) ;
2010-05-15 20:40:58 +02:00
2010-05-09 23:23:13 +02:00
for ( int i = 0 ; i < serverLines . size ( ) ; + + i ) {
serverLines [ i ] - > render ( ) ;
}
2010-07-08 10:29:51 +02:00
}
if ( program ! = NULL ) program - > renderProgramMsgBox ( ) ;
2010-05-09 23:23:13 +02:00
}
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 ( ) ) ;
2010-09-04 01:54:11 +02:00
//switch on music again!!
Config & config = Config : : getInstance ( ) ;
float configVolume = ( config . getInt ( " SoundVolumeMusic " ) / 100.f ) ;
CoreData : : getInstance ( ) . getMenuMusic ( ) - > setVolume ( configVolume ) ;
2010-05-16 18:40:21 +02:00
playServerFoundSound = false ;
}
2010-09-04 01:54:11 +02:00
console . update ( ) ;
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-12-05 02:52:38 +01:00
if ( masterServerThreadInDeletion = = true ) {
return ;
}
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-06-26 10:04:11 +02:00
bool needUpdate = needUpdateFromServer ;
safeMutex . ReleaseLock ( ) ;
if ( needUpdate = = true ) {
2010-05-13 08:43:56 +02:00
updateServerInfo ( ) ;
}
}
2010-05-11 07:39:00 +02:00
void MenuStateMasterserver : : updateServerInfo ( ) {
2010-05-15 20:49:45 +02:00
try {
2010-05-16 18:40:21 +02:00
2010-10-30 19:31:57 +02:00
if ( masterServerThreadInDeletion = = true ) {
return ;
}
MutexSafeWrapper safeMutexPtr ( & masterServerThreadPtrChangeAccessor ) ;
2010-06-26 10:04:11 +02:00
if ( updateFromMasterserverThread = = NULL | |
updateFromMasterserverThread - > getQuitStatus ( ) = = true ) {
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( ) ;
2010-06-26 10:04:11 +02:00
return ;
}
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( true ) ;
2010-06-26 10:04:11 +02:00
MutexSafeWrapper safeMutex ( & masterServerThreadAccessor ) ;
needUpdateFromServer = false ;
2010-05-16 18:40:21 +02:00
int numberOfOldServerLines = serverLines . size ( ) ;
2010-05-15 20:49:45 +02:00
clearServerLines ( ) ;
2010-06-26 10:04:11 +02:00
safeMutex . ReleaseLock ( true ) ;
2010-05-16 18:40:21 +02:00
2010-10-07 20:43:29 +02:00
if ( announcementLoaded = = false ) {
string announcementURL = Config : : getInstance ( ) . getString ( " AnnouncementURL " , " http://megaglest.pepper.freeit.org/announcement.txt " ) ;
if ( announcementURL ! = " " ) {
std : : string announcementTxt = SystemFlags : : getHTTP ( announcementURL ) ;
if ( StartsWith ( announcementTxt , " Announcement from Masterserver: " ) = = true ) {
announcementLabel . setText ( announcementTxt ) ;
}
}
2010-10-13 21:16:04 +02:00
string versionURL = Config : : getInstance ( ) . getString ( " versionURL " , " http://megaglest.pepper.freeit.org/ " ) + glestVersionString + " .txt " ;
2010-10-14 21:53:34 +02:00
//printf("\nversionURL=%s\n",versionURL.c_str());
2010-10-13 21:16:04 +02:00
if ( versionURL ! = " " ) {
std : : string versionTxt = SystemFlags : : getHTTP ( versionURL ) ;
if ( StartsWith ( versionTxt , " Version info: " ) = = true ) {
versionInfoLabel . setText ( versionTxt ) ;
}
}
2010-10-06 22:54:08 +02:00
announcementLoaded = true ;
}
2010-05-15 20:49:45 +02:00
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) ! = " " ) {
2010-06-26 10:04:11 +02:00
std : : string serverInfo = SystemFlags : : getHTTP ( Config : : getInstance ( ) . getString ( " Masterserver " ) + " showServersForGlest.php " ) ;
if ( serverInfo ! = " " ) {
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 , " | " ) ;
2010-07-03 12:06:31 +02:00
const int MIN_FIELDS_EXPECTED = 12 ;
2010-06-26 10:04:11 +02:00
if ( serverEntities . size ( ) > = MIN_FIELDS_EXPECTED ) {
Lang & lang = Lang : : getInstance ( ) ;
labelTitle . setText ( lang . get ( " AvailableServers " ) ) ;
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) = = " " ) {
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) ) ;
}
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-07-03 12:06:31 +02:00
masterServerInfo - > setExternalConnectPort ( strToInt ( serverEntities [ 11 ] ) ) ;
2010-06-26 10:04:11 +02:00
//printf("Getting Ping time for host %s\n",masterServerInfo->getIpAddress().c_str());
2010-07-03 11:14:58 +02:00
//float pingTime = Socket::getAveragePingMS(masterServerInfo->getIpAddress().c_str(),1);
2010-06-26 10:04:11 +02:00
//printf("Ping time = %f\n",pingTime);
char szBuf [ 1024 ] = " " ;
2010-07-03 11:14:58 +02:00
//sprintf(szBuf,"%s, %.2fms",masterServerInfo->getServerTitle().c_str(),pingTime);
sprintf ( szBuf , " %s " , masterServerInfo - > getServerTitle ( ) . c_str ( ) ) ;
2010-06-26 10:04:11 +02:00
masterServerInfo - > setServerTitle ( szBuf ) ;
2010-10-30 19:31:57 +02:00
safeMutexPtr . Lock ( ) ;
if ( masterServerThreadInDeletion = = true | |
updateFromMasterserverThread = = NULL | |
2010-06-26 10:04:11 +02:00
updateFromMasterserverThread - > getQuitStatus ( ) = = true ) {
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( ) ;
2010-06-26 10:04:11 +02:00
return ;
}
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( true ) ;
2010-06-26 10:04:11 +02:00
safeMutex . Lock ( ) ;
2010-09-09 23:07:39 +02:00
serverLines . push_back ( new ServerLine ( masterServerInfo , i , containerName ) ) ;
2010-06-26 10:04:11 +02:00
safeMutex . ReleaseLock ( true ) ;
}
else {
Lang & lang = Lang : : getInstance ( ) ;
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) + " [ " + serverInfo + " ] " ) ;
}
2010-05-15 20:49:45 +02:00
}
}
2010-05-11 07:39:00 +02:00
}
2010-06-26 10:04:11 +02:00
2010-10-30 19:31:57 +02:00
safeMutexPtr . Lock ( ) ;
2010-06-26 10:04:11 +02:00
if ( updateFromMasterserverThread = = NULL | |
updateFromMasterserverThread - > getQuitStatus ( ) = = true ) {
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( ) ;
2010-06-26 10:04:11 +02:00
return ;
}
2010-10-30 19:31:57 +02:00
safeMutexPtr . ReleaseLock ( ) ;
2010-05-16 18:40:21 +02:00
2010-06-26 10:04:11 +02:00
safeMutex . Lock ( ) ;
if ( serverLines . size ( ) > numberOfOldServerLines ) {
2010-05-16 18:40:21 +02:00
playServerFoundSound = true ;
}
2010-10-30 19:31:57 +02:00
safeMutex . ReleaseLock ( ) ;
2010-05-15 20:49:45 +02:00
}
catch ( const exception & e ) {
2010-10-06 22:22:06 +02:00
SystemFlags : : OutputDebug ( SystemFlags : : debugError , " In [%s::%s Line: %d] Error [%s] \n " , __FILE__ , __FUNCTION__ , __LINE__ , e . what ( ) ) ;
2010-05-15 20:49:45 +02:00
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-07-03 12:06:31 +02:00
bool MenuStateMasterserver : : connectToServer ( string ipString , int port )
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-07-03 12:06:31 +02:00
//int serverPort = Config::getInstance().getInt("ServerPort",intToStr(GameConstants::serverPort).c_str());
int serverPort = port ;
2010-05-17 22:41:18 +02:00
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-07-03 12:06:31 +02:00
if ( clientInterface - > isConnected ( ) = = false ) {
2010-05-09 23:23:13 +02:00
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__ ) ;
}
2010-07-03 12:06:31 +02:00
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 ) ;
}
}
2010-09-04 01:54:11 +02:00
void MenuStateMasterserver : : keyDown ( char key ) {
Config & configKeys = Config : : getInstance ( std : : pair < ConfigType , ConfigType > ( cfgMainKeys , cfgUserKeys ) ) ;
if ( key = = configKeys . getCharKey ( " ToggleMusic " ) ) {
Config & config = Config : : getInstance ( ) ;
Lang & lang = Lang : : getInstance ( ) ;
float configVolume = ( config . getInt ( " SoundVolumeMusic " ) / 100.f ) ;
float currentVolume = CoreData : : getInstance ( ) . getMenuMusic ( ) - > getVolume ( ) ;
if ( currentVolume > 0 ) {
CoreData : : getInstance ( ) . getMenuMusic ( ) - > setVolume ( 0.f ) ;
console . addLine ( lang . get ( " GameMusic " ) + " " + lang . get ( " Off " ) ) ;
}
else {
CoreData : : getInstance ( ) . getMenuMusic ( ) - > setVolume ( configVolume ) ;
//If the config says zero, use the default music volume
//gameMusic->setVolume(configVolume ? configVolume : 0.9);
console . addLine ( lang . get ( " GameMusic " ) ) ;
}
}
2010-09-09 23:07:39 +02:00
else if ( key = = configKeys . getCharKey ( " SaveGUILayout " ) ) {
bool saved = GraphicComponent : : saveAllCustomProperties ( containerName ) ;
Lang & lang = Lang : : getInstance ( ) ;
console . addLine ( lang . get ( " GUILayoutSaved " ) + " [ " + ( saved ? lang . get ( " Yes " ) : lang . get ( " No " ) ) + " ] " ) ;
}
2010-09-04 01:54:11 +02:00
}
//CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f);
2010-05-09 23:23:13 +02:00
} } //end namespace