2010-05-09 23:23:13 +02:00
// ==============================================================
// This file is part of Glest (www.glest.org)
2010-12-20 17:45:31 +01:00
//
2010-05-09 23:23:13 +02:00
// 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"
2010-12-27 01:59:57 +01:00
# include "server_line.h"
2010-05-09 23:23:13 +02:00
# 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"
2011-04-10 22:03:38 +02:00
# include "menu_state_new_game.h"
2010-05-09 23:23:13 +02:00
# 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>
2012-11-10 10:22:28 +01:00
# include "cache_manager.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 ;
2012-04-12 08:03:21 +02:00
static string IRC_SERVER = " irc.freenode.net " ;
static string IRC_CHANNEL = " #megaglest-lobby " ;
2010-12-23 01:00:30 +01:00
2010-05-09 23:23:13 +02:00
// =====================================================
// class MenuStateMasterserver
// =====================================================
MenuStateMasterserver : : MenuStateMasterserver ( Program * program , MainMenu * mainMenu ) :
2010-12-20 17:45:31 +01:00
MenuState ( program , mainMenu , " masterserver " )
2010-05-09 23:23:13 +02:00
{
2011-03-25 11:11:16 +01:00
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " \n \n \n \n ******************** ENTERING MASTERSERVER MENU \n \n \n \n \n " ) ;
2010-09-09 23:07:39 +02:00
containerName = " MasterServer " ;
2012-03-03 09:28:15 +01:00
masterserverParseErrorShown = false ;
2010-10-15 03:52:36 +02:00
updateFromMasterserverThread = NULL ;
2010-12-23 01:00:30 +01:00
ircClient = NULL ;
2010-12-31 18:16:49 +01:00
serverInfoString = " empty " ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2010-05-09 23:23:13 +02:00
Lang & lang = Lang : : getInstance ( ) ;
2010-12-20 17:45:31 +01:00
2010-12-27 01:59:57 +01:00
//Configure ConsolePosition
consoleIRC . setYPos ( 60 ) ;
consoleIRC . setFont ( CoreData : : getInstance ( ) . getMenuFontNormal ( ) ) ;
2011-06-28 02:51:13 +02:00
consoleIRC . setFont3D ( CoreData : : getInstance ( ) . getMenuFontNormal3D ( ) ) ;
2010-12-27 01:59:57 +01:00
consoleIRC . setLineHeight ( 18 ) ;
2012-09-09 16:12:35 +02:00
consoleIRC . setOnlyChatMessagesInStoredLines ( false ) ;
2010-12-27 01:59:57 +01:00
2010-12-31 18:16:49 +01:00
serverLinesToRender = 8 ;
2010-12-27 01:59:57 +01:00
serverLinesLineHeight = 25 ;
serverLinesYBase = 680 ;
2010-12-29 22:03:57 +01:00
2010-12-27 01:59:57 +01:00
userButtonsHeight = 20 ;
userButtonsWidth = 150 ;
userButtonsLineHeight = userButtonsHeight + 2 ;
2010-12-31 18:16:49 +01:00
userButtonsYBase = serverLinesYBase - ( serverLinesToRender ) * serverLinesLineHeight - 90 ;
2010-12-27 01:59:57 +01:00
userButtonsToRender = userButtonsYBase / userButtonsLineHeight ;
userButtonsXBase = 1000 - userButtonsWidth ;
2010-12-29 22:03:57 +01:00
2010-12-31 18:16:49 +01:00
userScrollBar . init ( 1000 - 20 , 0 , false , 200 , 20 ) ;
userScrollBar . setLength ( userButtonsYBase + userButtonsLineHeight ) ;
userScrollBar . setElementCount ( 0 ) ;
userScrollBar . setVisibleSize ( userButtonsToRender ) ;
userScrollBar . setVisibleStart ( 0 ) ;
userButtonsXBase = 1000 - userButtonsWidth - userScrollBar . getW ( ) ;
serverScrollBar . init ( 1000 - 20 , serverLinesYBase - serverLinesLineHeight * ( serverLinesToRender - 1 ) , false , 200 , 20 ) ;
serverScrollBar . setLength ( serverLinesLineHeight * serverLinesToRender ) ;
serverScrollBar . setElementCount ( 0 ) ;
serverScrollBar . setVisibleSize ( serverLinesToRender ) ;
serverScrollBar . setVisibleStart ( 0 ) ;
lines [ 0 ] . init ( 0 , userButtonsYBase + userButtonsLineHeight + serverLinesLineHeight ) ;
lines [ 1 ] . init ( userButtonsXBase - 5 , 0 , 5 , userButtonsYBase + 2 * userButtonsLineHeight ) ;
2010-12-27 01:59:57 +01:00
lines [ 1 ] . setHorizontal ( false ) ;
2010-12-29 22:03:57 +01:00
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-12-20 17:45:31 +01: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 ( ) ) ;
2011-06-28 02:51:13 +02:00
announcementLabel . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
2010-10-06 22:54:08 +02:00
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 ( ) ) ;
2011-06-28 02:51:13 +02:00
versionInfoLabel . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
2010-10-13 21:16:04 +02:00
versionInfoLabel . setText ( " " ) ;
2010-12-29 22:03:57 +01:00
2010-05-09 23:23:13 +02:00
// header
2010-09-09 08:42:39 +02:00
labelTitle . registerGraphicComponent ( containerName , " labelTitle " ) ;
2010-12-27 01:59:57 +01:00
labelTitle . init ( 330 , serverLinesYBase + 40 ) ;
2010-10-06 22:54:08 +02:00
labelTitle . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
2011-06-28 02:51:13 +02:00
labelTitle . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
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-12-20 17:45:31 +01:00
2010-05-15 20:40:58 +02:00
// bottom
2010-12-23 01:00:30 +01:00
int buttonPos = 230 ;
2010-12-20 17:45:31 +01:00
2010-10-23 11:06:47 +02:00
// Titles for current games - START
int lineIndex = 0 ;
int lineOffset = 25 * lineIndex ;
2011-04-30 03:05:53 +02:00
int i = 7 ;
2010-12-27 01:59:57 +01:00
int startOffset = serverLinesYBase + 23 ;
2010-12-29 22:03:57 +01:00
2010-10-23 11:06:47 +02:00
//general info:
2011-04-30 03:05:53 +02:00
//i+=10;
2010-10-23 11:06:47 +02:00
glestVersionLabel . registerGraphicComponent ( containerName , " glestVersionLabel " ) ;
glestVersionLabel . init ( i , startOffset - lineOffset ) ;
glestVersionLabel . setText ( lang . get ( " MGVersion " ) ) ;
2011-04-30 03:05:53 +02:00
i + = 70 ;
2010-10-23 11:06:47 +02:00
platformLabel . registerGraphicComponent ( containerName , " platformLabel " ) ;
platformLabel . init ( i , startOffset - lineOffset ) ;
platformLabel . setText ( lang . get ( " MGPlatform " ) ) ;
2010-12-17 21:55:46 +01:00
// i+=50;
// binaryCompileDateLabel.registerGraphicComponent(containerName,"binaryCompileDateLabel");
// binaryCompileDateLabel.init(i,startOffset-lineOffset);
// binaryCompileDateLabel.setText(lang.get("MGBuildDateTime"));
2010-10-23 11:06:47 +02:00
//game info:
2011-04-30 03:05:53 +02:00
i + = 130 ;
2010-10-23 11:06:47 +02:00
serverTitleLabel . registerGraphicComponent ( containerName , " serverTitleLabel " ) ;
serverTitleLabel . init ( i , startOffset - lineOffset ) ;
serverTitleLabel . setText ( lang . get ( " MGGameTitle " ) ) ;
2011-04-30 03:05:53 +02:00
i + = 150 ;
2011-01-25 08:41:12 +01:00
countryLabel . registerGraphicComponent ( containerName , " countryLabel " ) ;
countryLabel . init ( i , startOffset - lineOffset ) ;
countryLabel . setText ( lang . get ( " MGGameCountry " ) ) ;
2011-04-30 03:05:53 +02:00
i + = 65 ;
2011-01-25 22:45:42 +01:00
// ipAddressLabel.registerGraphicComponent(containerName,"ipAddressLabel");
// ipAddressLabel.init(i,startOffset-lineOffset);
// ipAddressLabel.setText(lang.get("MGGameIP"));
// i+=100;
2010-10-23 11:06:47 +02:00
//game setup info:
techLabel . registerGraphicComponent ( containerName , " techLabel " ) ;
techLabel . init ( i , startOffset - lineOffset ) ;
techLabel . setText ( lang . get ( " TechTree " ) ) ;
2011-01-25 22:45:42 +01:00
i + = 120 ;
2010-10-23 11:06:47 +02:00
mapLabel . registerGraphicComponent ( containerName , " mapLabel " ) ;
mapLabel . init ( i , startOffset - lineOffset ) ;
mapLabel . setText ( lang . get ( " Map " ) ) ;
2011-01-25 22:45:42 +01:00
i + = 120 ;
// tilesetLabel.registerGraphicComponent(containerName,"tilesetLabel");
// tilesetLabel.init(i,startOffset-lineOffset);
// tilesetLabel.setText(lang.get("Tileset"));
// i+=100;
2010-10-23 11:06:47 +02:00
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 " ) ) ;
2011-04-30 03:05:53 +02:00
i + = 60 ;
2011-01-25 22:45:42 +01:00
statusLabel . registerGraphicComponent ( containerName , " statusLabel " ) ;
statusLabel . init ( i , startOffset - lineOffset ) ;
statusLabel . setText ( lang . get ( " MGGameStatus " ) ) ;
i + = 130 ;
2010-10-23 11:06:47 +02:00
selectButton . registerGraphicComponent ( containerName , " selectButton " ) ;
selectButton . init ( i , startOffset - lineOffset ) ;
selectButton . setText ( lang . get ( " MGJoinGameSlots " ) ) ;
// Titles for current games - END
2010-12-20 17:45:31 +01: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 " ) ) ;
2011-10-30 23:23:57 +01:00
buttonCreateGame . setText ( lang . get ( " HostGame " ) ) ;
2010-05-15 20:40:58 +02:00
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-12-23 01:00:30 +01:00
ircOnlinePeopleLabel . registerGraphicComponent ( containerName , " ircOnlinePeopleLabel " ) ;
2010-12-31 18:16:49 +01:00
ircOnlinePeopleLabel . init ( userButtonsXBase , userButtonsYBase + userButtonsLineHeight ) ;
2011-01-02 01:28:13 +01:00
ircOnlinePeopleLabel . setText ( lang . get ( " IRCPeopleOnline " ) ) ;
2010-12-23 01:00:30 +01:00
2011-01-20 22:11:39 +01:00
ircOnlinePeopleStatusLabel . registerGraphicComponent ( containerName , " ircOnlinePeopleStatusLabel " ) ;
ircOnlinePeopleStatusLabel . init ( userButtonsXBase , userButtonsYBase + userButtonsLineHeight - 20 ) ;
ircOnlinePeopleStatusLabel . setText ( " " ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2010-05-09 23:23:13 +02:00
NetworkManager : : getInstance ( ) . end ( ) ;
NetworkManager : : getInstance ( ) . init ( nrClient ) ;
2010-12-29 22:03:57 +01:00
2012-10-11 02:26:00 +02:00
//console.addLine(lang.get("ToSwitchOffMusicPress")+" - \""+configKeys.getCharKey("ToggleMusic")+"\"");
2010-05-13 08:43:56 +02:00
2010-09-09 08:42:39 +02:00
GraphicComponent : : applyAllCustomProperties ( containerName ) ;
2010-12-24 03:10:31 +01:00
char szIRCNick [ 80 ] = " " ;
2012-09-27 08:42:57 +02:00
Chrono seed ( true ) ;
2012-10-30 18:12:04 +01:00
srand ( ( unsigned int ) seed . getCurTicks ( ) ) ;
2012-09-27 08:42:57 +02:00
2010-12-24 03:10:31 +01:00
int randomNickId = rand ( ) % 999 ;
2010-12-27 01:59:57 +01:00
string netPlayerName = Config : : getInstance ( ) . getString ( " NetPlayerName " , Socket : : getHostName ( ) . c_str ( ) ) ;
string ircname = netPlayerName . substr ( 0 , 9 ) ;
2012-10-19 03:31:20 +02:00
snprintf ( szIRCNick , 80 , " MG_%s_%d " , ircname . c_str ( ) , randomNickId ) ;
2011-08-31 01:45:51 +02:00
normalizeNick ( szIRCNick ) ;
2011-01-01 21:31:25 +01:00
currentIrcNick = ircname ;
consoleIRC . setStringToHighlight ( currentIrcNick ) ;
2010-12-24 03:10:31 +01:00
2010-12-27 01:59:57 +01:00
lines [ 2 ] . init ( 0 , consoleIRC . getYPos ( ) - 10 , userButtonsXBase , 5 ) ;
2010-12-24 03:10:31 +01:00
chatManager . init ( & consoleIRC , - 1 , true , szIRCNick ) ;
2010-12-27 01:59:57 +01:00
chatManager . setXPos ( 0 ) ;
chatManager . setYPos ( consoleIRC . getYPos ( ) - 20 ) ;
chatManager . setFont ( CoreData : : getInstance ( ) . getMenuFontNormal ( ) ) ;
2011-06-28 02:51:13 +02:00
chatManager . setFont3D ( CoreData : : getInstance ( ) . getMenuFontNormal3D ( ) ) ;
2010-10-30 19:31:57 +02:00
2010-05-13 08:43:56 +02:00
needUpdateFromServer = true ;
2013-01-23 15:51:28 +01:00
static string mutexOwnerId = string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + string ( " _ " ) + intToStr ( __LINE__ ) ;
2010-05-13 08:43:56 +02:00
updateFromMasterserverThread = new SimpleTaskThread ( this , 0 , 100 ) ;
2013-01-23 15:51:28 +01:00
updateFromMasterserverThread - > setUniqueID ( mutexOwnerId ) ;
2010-05-13 08:43:56 +02:00
updateFromMasterserverThread - > start ( ) ;
2010-06-18 01:24:15 +02:00
2011-10-25 20:39:11 +02:00
if ( Config : : getInstance ( ) . getString ( " IRCServer " , " " ) ! = " " ) {
2012-04-12 08:03:21 +02:00
IRC_SERVER = Config : : getInstance ( ) . getString ( " IRCServer " ) ;
2011-10-25 20:39:11 +02:00
}
2012-04-12 08:03:21 +02:00
ircArgs . push_back ( IRC_SERVER ) ;
2011-10-25 20:39:11 +02:00
if ( Config : : getInstance ( ) . getString ( " IRCNick " , " " ) ! = " " ) {
ircArgs . push_back ( Config : : getInstance ( ) . getString ( " IRCNick " ) ) ;
}
else {
ircArgs . push_back ( szIRCNick ) ;
}
if ( Config : : getInstance ( ) . getString ( " IRCChannel " , " " ) ! = " " ) {
2012-04-12 08:03:21 +02:00
IRC_CHANNEL = Config : : getInstance ( ) . getString ( " IRCChannel " ) ;
2011-10-25 20:39:11 +02:00
}
2012-04-12 08:03:21 +02:00
ircArgs . push_back ( IRC_CHANNEL ) ;
2011-10-25 20:39:11 +02:00
if ( Config : : getInstance ( ) . getString ( " IRCUsername " , " " ) ! = " " ) {
ircArgs . push_back ( Config : : getInstance ( ) . getString ( " IRCUsername " ) ) ;
}
else {
ircArgs . push_back ( szIRCNick ) ;
}
if ( Config : : getInstance ( ) . getString ( " IRCPassword " , " " ) ! = " " ) {
ircArgs . push_back ( " identify " + Config : : getInstance ( ) . getString ( " IRCPassword " ) ) ;
}
else {
ircArgs . push_back ( " " ) ;
}
2010-12-29 22:03:57 +01:00
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2012-11-10 10:22:28 +01:00
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " #1 IRCCLient Cache check \n " ) ;
2012-11-15 09:16:08 +01:00
IRCThread * & ircThread = CacheManager : : getCachedItem < IRCThread * > ( GameConstants : : ircClientCacheLookupKey ) ;
2012-11-19 22:56:21 +01:00
// Playername changed so restart the IRC Thread
if ( ircThread ! = NULL & & netPlayerName ! = ircThread - > getPlayerName ( ) ) {
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
ircThread - > leaveChannel ( ) ;
ircThread - > setCallbackObj ( NULL ) ;
ircThread - > signalQuit ( ) ;
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
ircThread = NULL ;
}
2012-11-10 10:22:28 +01:00
if ( ircThread = = NULL ) {
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " #2 IRCCLient Cache check \n " ) ;
ircThread = new IRCThread ( ircArgs , this ) ;
ircClient = ircThread ;
ircClient - > setUniqueID ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) ;
2012-11-19 22:56:21 +01:00
ircClient - > setPlayerName ( netPlayerName ) ;
2012-11-10 10:22:28 +01:00
ircClient - > start ( ) ;
}
else {
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " #3 IRCCLient Cache check \n " ) ;
ircClient = ircThread ;
ircClient - > setCallbackObj ( this ) ;
ircClient - > joinChannel ( ) ;
}
2010-12-23 01:00:30 +01:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
2011-10-25 20:39:11 +02:00
void MenuStateMasterserver : : reloadUI ( ) {
Lang & lang = Lang : : getInstance ( ) ;
2011-11-04 00:38:43 +01:00
console . resetFonts ( ) ;
2011-10-25 20:39:11 +02:00
consoleIRC . setFont ( CoreData : : getInstance ( ) . getMenuFontNormal ( ) ) ;
consoleIRC . setFont3D ( CoreData : : getInstance ( ) . getMenuFontNormal3D ( ) ) ;
mainMessageBox . init ( lang . get ( " Ok " ) ) ;
announcementLabel . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
announcementLabel . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
versionInfoLabel . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
versionInfoLabel . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
labelTitle . setFont ( CoreData : : getInstance ( ) . getMenuFontBig ( ) ) ;
labelTitle . setFont3D ( CoreData : : getInstance ( ) . getMenuFontBig3D ( ) ) ;
labelTitle . setText ( lang . get ( " AvailableServers " ) ) ;
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) = = " " ) {
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) ) ;
}
glestVersionLabel . setText ( lang . get ( " MGVersion " ) ) ;
platformLabel . setText ( lang . get ( " MGPlatform " ) ) ;
serverTitleLabel . setText ( lang . get ( " MGGameTitle " ) ) ;
countryLabel . setText ( lang . get ( " MGGameCountry " ) ) ;
techLabel . setText ( lang . get ( " TechTree " ) ) ;
mapLabel . setText ( lang . get ( " Map " ) ) ;
activeSlotsLabel . setText ( lang . get ( " MGGameSlots " ) ) ;
externalConnectPort . setText ( lang . get ( " Port " ) ) ;
statusLabel . setText ( lang . get ( " MGGameStatus " ) ) ;
selectButton . setText ( lang . get ( " MGJoinGameSlots " ) ) ;
// Titles for current games - END
buttonRefresh . setText ( lang . get ( " RefreshList " ) ) ;
buttonReturn . setText ( lang . get ( " Return " ) ) ;
2011-10-30 23:23:57 +01:00
buttonCreateGame . setText ( lang . get ( " HostGame " ) ) ;
2011-10-25 20:39:11 +02:00
labelAutoRefresh . setText ( lang . get ( " AutoRefreshRate " ) ) ;
ircOnlinePeopleLabel . setText ( lang . get ( " IRCPeopleOnline " ) ) ;
chatManager . setFont ( CoreData : : getInstance ( ) . getMenuFontNormal ( ) ) ;
chatManager . setFont3D ( CoreData : : getInstance ( ) . getMenuFontNormal3D ( ) ) ;
GraphicComponent : : reloadFontsForRegisterGraphicComponents ( containerName ) ;
}
2010-12-27 01:59:57 +01:00
void MenuStateMasterserver : : setConsolePos ( int yPos ) {
consoleIRC . setYPos ( yPos ) ;
lines [ 2 ] . setY ( consoleIRC . getYPos ( ) - 10 ) ;
chatManager . setYPos ( consoleIRC . getYPos ( ) - 20 ) ;
}
void MenuStateMasterserver : : setButtonLinePosition ( int pos ) {
buttonReturn . setY ( pos ) ;
buttonCreateGame . setY ( pos ) ;
buttonRefresh . setY ( pos ) ;
labelAutoRefresh . setY ( pos + 30 ) ;
listBoxAutoRefresh . setY ( pos ) ;
}
2010-12-29 22:03:57 +01:00
void MenuStateMasterserver : : IRC_CallbackEvent ( IRCEventType evt , const char * origin , const char * * params , unsigned int count ) {
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-12-29 22:03:57 +01:00
if ( ircClient ! = NULL ) {
if ( evt = = IRC_evt_exitThread ) {
2012-11-19 18:17:50 +01:00
ircClient - > leaveChannel ( ) ;
ircClient - > setCallbackObj ( NULL ) ;
2010-12-29 22:03:57 +01:00
ircClient = NULL ;
}
else if ( evt = = IRC_evt_chatText ) {
//printf ("===> IRC: '%s' said in channel %s: %s\n",origin ? origin : "someone",params[0], params[1] );
2012-10-19 03:31:20 +02:00
char szBuf [ 8096 ] = " " ;
snprintf ( szBuf , 8096 , " %s: %s " , origin ? origin : " someone " , params [ 1 ] ) ;
2011-01-01 21:31:25 +01:00
string helpSTr = szBuf ;
if ( helpSTr . find ( currentIrcNick ) ! = string : : npos ) {
CoreData & coreData = CoreData : : getInstance ( ) ;
SoundRenderer & soundRenderer = SoundRenderer : : getInstance ( ) ;
soundRenderer . playFx ( coreData . getHighlightSound ( ) ) ;
}
2010-12-29 22:03:57 +01:00
consoleIRC . addLine ( szBuf ) ;
}
}
2010-12-23 01:00:30 +01:00
}
void MenuStateMasterserver : : cleanup ( ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2011-01-02 07:46:48 +01:00
needUpdateFromServer = false ;
2011-01-02 10:33:37 +01:00
safeMutex . ReleaseLock ( ) ;
2010-12-23 01:00:30 +01:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-10-30 19:31:57 +02:00
2011-01-02 07:46:48 +01:00
if ( updateFromMasterserverThread ! = NULL & &
2011-01-02 10:33:37 +01:00
updateFromMasterserverThread - > canShutdown ( true ) = = true ) {
if ( updateFromMasterserverThread - > shutdownAndWait ( ) = = true ) {
delete updateFromMasterserverThread ;
}
2011-01-02 07:46:48 +01:00
}
updateFromMasterserverThread = NULL ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-13 09:24:59 +02:00
2010-06-18 20:47:20 +02:00
clearServerLines ( ) ;
2010-12-27 01:59:57 +01:00
clearUserButtons ( ) ;
2010-06-11 05:17:38 +02:00
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-12-23 01:00:30 +01:00
if ( ircClient ! = NULL ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
2012-11-10 10:22:28 +01:00
ircClient - > leaveChannel ( ) ;
2010-12-29 22:03:57 +01:00
ircClient - > setCallbackObj ( NULL ) ;
2012-11-10 10:22:28 +01:00
//ircClient->signalQuit();
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
ircClient = NULL ;
}
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] END \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
}
MenuStateMasterserver : : ~ MenuStateMasterserver ( ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
cleanup ( ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] END \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
2010-12-23 01:00:30 +01:00
void MenuStateMasterserver : : clearServerLines ( ) {
2011-01-02 07:46:48 +01:00
while ( ! serverLines . empty ( ) ) {
2010-05-09 23:23:13 +02:00
delete serverLines . back ( ) ;
serverLines . pop_back ( ) ;
}
}
2010-12-27 01:59:57 +01:00
void MenuStateMasterserver : : clearUserButtons ( ) {
while ( ! userButtons . empty ( ) ) {
delete userButtons . back ( ) ;
userButtons . pop_back ( ) ;
}
}
2010-05-09 23:23:13 +02:00
void MenuStateMasterserver : : mouseClick ( int x , int y , MouseButton mouseButton ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
CoreData & coreData = CoreData : : getInstance ( ) ;
SoundRenderer & soundRenderer = SoundRenderer : : getInstance ( ) ;
if ( mainMessageBox . getEnabled ( ) ) {
2012-02-19 18:37:53 +01:00
int button = 0 ;
2010-05-09 23:23:13 +02:00
if ( mainMessageBox . mouseClick ( x , y , button ) )
2010-12-20 17:45:31 +01:00
{
2010-05-09 23:23:13 +02:00
soundRenderer . playFx ( coreData . getClickSoundA ( ) ) ;
2012-02-19 18:37:53 +01:00
if ( button = = 0 )
2010-05-09 23:23:13 +02:00
{
mainMessageBox . setEnabled ( false ) ;
}
}
}
2010-12-31 18:16:49 +01:00
else if ( userScrollBar . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
}
else if ( serverScrollBar . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
}
2010-05-09 23:23:13 +02:00
else if ( buttonRefresh . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
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
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
else if ( buttonReturn . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2010-05-09 23:23:13 +02:00
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
2010-05-13 09:24:59 +02:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2011-06-26 12:12:23 +02:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
ircClient - > SendIRCCmdMessage ( IRC_CHANNEL , " left the lobby " ) ;
2012-11-09 08:09:53 +01:00
sleep ( 30 ) ;
2011-06-26 12:12:23 +02:00
}
2010-12-23 01:00:30 +01:00
cleanup ( ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
2011-04-10 22:03:38 +02:00
mainMenu - > setState ( new MenuStateNewGame ( program , mainMenu ) ) ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-09 23:23:13 +02:00
}
2010-05-15 20:40:58 +02:00
else if ( buttonCreateGame . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
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
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2011-06-26 12:12:23 +02:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
ircClient - > SendIRCCmdMessage ( IRC_CHANNEL , " tries to create a game " ) ;
2012-11-09 08:09:53 +01:00
sleep ( 30 ) ;
2011-06-26 12:12:23 +02:00
}
2010-12-23 01:00:30 +01:00
cleanup ( ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-23 01:00:30 +01:00
2011-10-30 23:23:57 +01:00
mainMenu - > setState ( new MenuStateCustomGame ( program , mainMenu , true , pMasterServer ) ) ;
2010-06-18 01:24:15 +02:00
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-05-15 20:40:58 +02:00
}
else if ( listBoxAutoRefresh . mouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
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 {
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-12-27 01:59:57 +01:00
bool clicked = false ;
2010-12-31 18:16:49 +01:00
if ( ! clicked & & serverScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = serverScrollBar . getVisibleStart ( ) ; i < = serverScrollBar . getVisibleEnd ( ) ; + + i ) {
if ( serverLines [ i ] - > buttonMouseClick ( x , y ) ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
clicked = true ;
soundRenderer . playFx ( coreData . getClickSoundB ( ) ) ;
string connectServerIP = serverLines [ i ] - > getMasterServerInfo ( ) - > getIpAddress ( ) ;
int connectServerPort = serverLines [ i ] - > getMasterServerInfo ( ) - > getExternalConnectPort ( ) ;
2011-01-02 19:47:43 +01:00
bool connected = connectToServer ( connectServerIP , connectServerPort ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
safeMutex . ReleaseLock ( ) ;
2011-01-02 19:47:43 +01:00
if ( connected ) {
2011-06-26 12:12:23 +02:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
ircClient - > SendIRCCmdMessage ( IRC_CHANNEL , " connecting to ' " + serverLines [ i ] - > getMasterServerInfo ( ) - > getServerTitle ( ) + " ' " ) ;
2012-11-09 08:09:53 +01:00
sleep ( 30 ) ;
2011-06-26 12:12:23 +02:00
}
2011-01-02 19:47:43 +01:00
cleanup ( ) ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2011-01-02 19:47:43 +01:00
mainMenu - > setState ( new MenuStateConnectedGame ( program , mainMenu , jmMasterserver ) ) ;
}
2010-12-31 18:16:49 +01:00
break ;
}
}
}
if ( ! clicked & & userScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = userScrollBar . getVisibleStart ( ) ; i < = userScrollBar . getVisibleEnd ( ) ; + + i ) {
2011-08-30 20:54:01 +02:00
if ( userButtons [ i ] - > getEnabled ( ) = = true & & userButtons [ i ] - > mouseClick ( x , y ) ) {
2010-12-27 01:59:57 +01:00
clicked = true ;
if ( ! chatManager . getEditEnabled ( ) )
{
chatManager . switchOnEdit ( ) ;
chatManager . addText ( userButtons [ i ] - > getText ( ) + " " ) ;
}
else
{
chatManager . addText ( userButtons [ i ] - > getText ( ) ) ;
}
break ;
}
}
}
2010-05-09 23:23:13 +02:00
}
}
2012-11-02 21:07:50 +01:00
void MenuStateMasterserver : : mouseUp ( int x , int y , const MouseButton mouseButton ) {
if ( mouseButton = = mbLeft ) {
userScrollBar . mouseUp ( x , y ) ;
serverScrollBar . mouseUp ( x , y ) ;
}
}
2010-05-09 23:23:13 +02:00
void MenuStateMasterserver : : mouseMove ( int x , int y , const MouseState * ms ) {
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-06-11 05:17:38 +02:00
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 ) ;
2011-01-01 21:31:25 +01:00
if ( ms - > get ( mbLeft ) ) {
userScrollBar . mouseDown ( x , y ) ;
serverScrollBar . mouseDown ( x , y ) ;
} else {
userScrollBar . mouseMove ( x , y ) ;
serverScrollBar . mouseMove ( x , y ) ;
}
2010-05-15 20:40:58 +02:00
listBoxAutoRefresh . mouseMove ( x , y ) ;
2010-12-20 17:45:31 +01:00
2010-12-31 18:16:49 +01:00
if ( serverScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = serverScrollBar . getVisibleStart ( ) ; i < = serverScrollBar . getVisibleEnd ( ) ; + + i ) {
serverLines [ i ] - > buttonMouseMove ( x , y ) ;
}
2010-05-09 23:23:13 +02:00
}
2010-12-31 18:16:49 +01:00
if ( userScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = userScrollBar . getVisibleStart ( ) ; i < = userScrollBar . getVisibleEnd ( ) ; + + i ) {
2011-08-30 20:54:01 +02:00
if ( userButtons [ i ] - > getEnabled ( ) = = true ) {
userButtons [ i ] - > mouseMove ( x , y ) ;
}
2010-12-31 18:16:49 +01:00
}
2010-12-27 01:59:57 +01:00
}
2010-12-29 22:03:57 +01:00
2010-05-09 23:23:13 +02:00
}
void MenuStateMasterserver : : render ( ) {
Renderer & renderer = Renderer : : getInstance ( ) ;
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-10-23 11:06:47 +02:00
if ( mainMessageBox . getEnabled ( ) ) {
2010-05-09 23:23:13 +02:00
renderer . renderMessageBox ( & mainMessageBox ) ;
}
else
{
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
// Render titles for server games listed
const Vec4f titleLabelColor = CYAN ;
//general info:
renderer . renderLabel ( & glestVersionLabel , & titleLabelColor ) ;
renderer . renderLabel ( & platformLabel , & titleLabelColor ) ;
2010-12-18 00:23:45 +01:00
//renderer.renderLabel(&binaryCompileDateLabel,&titleLabelColor);
2010-10-23 11:06:47 +02:00
//game info:
renderer . renderLabel ( & serverTitleLabel , & titleLabelColor ) ;
2011-01-25 08:41:12 +01:00
renderer . renderLabel ( & countryLabel , & titleLabelColor ) ;
renderer . renderLabel ( & statusLabel , & titleLabelColor ) ;
2011-01-25 22:45:42 +01:00
//renderer.renderLabel(&ipAddressLabel,&titleLabelColor);
2010-10-23 11:06:47 +02:00
//game setup info:
renderer . renderLabel ( & techLabel , & titleLabelColor ) ;
renderer . renderLabel ( & mapLabel , & titleLabelColor ) ;
2011-01-25 22:45:42 +01:00
//renderer.renderLabel(&tilesetLabel,&titleLabelColor);
2010-10-23 11:06:47 +02:00
renderer . renderLabel ( & activeSlotsLabel , & titleLabelColor ) ;
renderer . renderLabel ( & externalConnectPort , & titleLabelColor ) ;
renderer . renderLabel ( & selectButton , & titleLabelColor ) ;
2011-01-20 22:11:39 +01:00
Lang & lang = Lang : : getInstance ( ) ;
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-12-24 03:10:31 +01:00
if ( ircClient ! = NULL & &
ircClient - > isConnected ( ) = = true & &
ircClient - > getHasJoinedChannel ( ) = = true ) {
const Vec4f titleLabelColor = GREEN ;
2011-01-20 22:11:39 +01:00
if ( ircOnlinePeopleStatusLabel . getText ( ) ! = " " ) {
ircOnlinePeopleStatusLabel . setText ( " " ) ;
}
2010-12-24 03:10:31 +01:00
renderer . renderLabel ( & ircOnlinePeopleLabel , & titleLabelColor ) ;
2011-01-20 22:11:39 +01:00
//renderer.renderLabel(&ircOnlinePeopleStatusLabel,&titleLabelColor);
2010-12-24 03:10:31 +01:00
}
else {
const Vec4f titleLabelColor = RED ;
2011-01-20 22:11:39 +01:00
if ( ircOnlinePeopleStatusLabel . getText ( ) ! = lang . get ( " Connecting " ) ) {
ircOnlinePeopleStatusLabel . setText ( lang . get ( " Connecting " ) ) ;
}
2010-12-24 03:10:31 +01:00
renderer . renderLabel ( & ircOnlinePeopleLabel , & titleLabelColor ) ;
2011-01-20 22:11:39 +01:00
renderer . renderLabel ( & ircOnlinePeopleStatusLabel , & titleLabelColor ) ;
2010-12-24 03:10:31 +01:00
}
2010-12-29 22:03:57 +01:00
safeMutexIRCPtr . ReleaseLock ( ) ;
2010-12-24 03:10:31 +01:00
const Vec4f titleLabelColorList = YELLOW ;
2010-12-20 17:45:31 +01:00
2010-12-31 18:16:49 +01:00
if ( serverScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = serverScrollBar . getVisibleStart ( ) ; i < = serverScrollBar . getVisibleEnd ( ) ; + + i ) {
serverLines [ i ] - > render ( ) ;
}
}
renderer . renderScrollBar ( & serverScrollBar ) ;
2010-12-27 01:59:57 +01:00
for ( int i = 0 ; i < sizeof ( lines ) / sizeof ( lines [ 0 ] ) ; + + i ) {
renderer . renderLine ( & lines [ i ] ) ;
}
renderer . renderButton ( & buttonRefresh ) ;
renderer . renderButton ( & buttonReturn ) ;
renderer . renderLabel ( & labelAutoRefresh ) ;
renderer . renderButton ( & buttonCreateGame ) ;
renderer . renderListBox ( & listBoxAutoRefresh ) ;
2010-12-29 22:03:57 +01:00
2010-12-31 18:16:49 +01:00
if ( userScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = userScrollBar . getVisibleStart ( ) ; i < = userScrollBar . getVisibleEnd ( ) ; + + i ) {
renderer . renderButton ( userButtons [ i ] ) ;
}
}
renderer . renderScrollBar ( & userScrollBar ) ;
2011-01-03 00:53:59 +01:00
if ( ircClient ! = NULL & &
ircClient - > isConnected ( ) = = true & &
ircClient - > getHasJoinedChannel ( ) = = true ) {
renderer . renderChatManager ( & chatManager ) ;
}
2012-11-09 19:09:32 +01:00
renderer . renderConsole ( & consoleIRC , false , true , 21 ) ;
2010-12-29 22:03:57 +01:00
2010-07-08 10:29:51 +02:00
}
if ( program ! = NULL ) program - > renderProgramMsgBox ( ) ;
2010-05-09 23:23:13 +02:00
}
2010-12-23 01:00:30 +01:00
void MenuStateMasterserver : : update ( ) {
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( ( updateFromMasterserverThread ! = NULL ? updateFromMasterserverThread - > getMutexThreadObjectAccessor ( ) : NULL ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
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-12-20 17:45:31 +01:00
2010-12-27 01:59:57 +01:00
// calculate button linepos:
2010-12-31 18:16:49 +01:00
setButtonLinePosition ( serverLinesYBase - ( serverLinesToRender ) * serverLinesLineHeight - 30 ) ;
2010-12-27 01:59:57 +01: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-12-20 17:45:31 +01:00
2010-05-16 18:40:21 +02:00
playServerFoundSound = false ;
}
2010-12-20 17:45:31 +01:00
2010-12-23 08:42:15 +01:00
//console.update();
2010-05-16 05:31:12 +02:00
2010-12-23 01:00:30 +01:00
//call the chat manager
chatManager . updateNetwork ( ) ;
//console
consoleIRC . update ( ) ;
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-12-23 01:00:30 +01:00
if ( ircClient ! = NULL ) {
2010-12-24 03:10:31 +01:00
std : : vector < string > nickList = ircClient - > getNickList ( ) ;
2012-11-09 08:09:53 +01:00
if ( currentIrcNick ! = ircClient - > getNick ( ) ) {
currentIrcNick = ircClient - > getNick ( ) ;
consoleIRC . setStringToHighlight ( currentIrcNick ) ;
}
2010-12-27 01:59:57 +01:00
bool isNew = false ;
//check if there is something new
2012-11-09 08:09:53 +01:00
if ( oldNickList . size ( ) ! = nickList . size ( ) ) {
2010-12-27 01:59:57 +01:00
isNew = true ;
}
else {
2012-11-09 08:09:53 +01:00
for ( unsigned int i = 0 ; i < nickList . size ( ) ; + + i ) {
if ( nickList [ i ] ! = oldNickList [ i ] ) {
2010-12-27 01:59:57 +01:00
isNew = true ;
break ;
}
}
}
2012-11-09 08:09:53 +01:00
2010-12-27 01:59:57 +01:00
if ( isNew ) {
clearUserButtons ( ) ;
for ( int i = 0 ; i < nickList . size ( ) ; + + i ) {
GraphicButton * button = new GraphicButton ( ) ;
2010-12-31 18:16:49 +01:00
button - > init ( userButtonsXBase , userButtonsYBase , userButtonsWidth , userButtonsHeight ) ;
//button->init(userButtonsXBase,userButtonsYBase-userButtonsLineHeight*i,userButtonsWidth,userButtonsHeight);
2010-12-27 01:59:57 +01:00
button - > setFont ( CoreData : : getInstance ( ) . getDisplayFontSmall ( ) ) ;
2011-06-28 02:51:13 +02:00
button - > setFont3D ( CoreData : : getInstance ( ) . getDisplayFontSmall3D ( ) ) ;
2010-12-27 01:59:57 +01:00
button - > setText ( nickList [ i ] ) ;
2011-08-30 20:54:01 +02:00
if ( strncmp ( & nickList [ i ] [ 0 ] , " MG_ " , 3 ) ! = 0 ) {
button - > setEnabled ( false ) ;
button - > setEditable ( false ) ;
button - > setCustomTexture ( CoreData : : getInstance ( ) . getCustomTexture ( ) ) ;
button - > setUseCustomTexture ( true ) ;
}
2010-12-27 01:59:57 +01:00
userButtons . push_back ( button ) ;
}
2010-12-31 18:16:49 +01:00
userScrollBar . setElementCount ( userButtons . size ( ) ) ;
2011-11-25 10:12:53 +01:00
oldNickList = nickList ;
chatManager . setAutoCompleteTextList ( oldNickList ) ;
2010-12-23 01:00:30 +01:00
}
2010-12-31 18:16:49 +01:00
if ( userScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = userScrollBar . getVisibleStart ( ) ; i < = userScrollBar . getVisibleEnd ( ) ; + + i ) {
userButtons [ i ] - > setY ( userButtonsYBase - userButtonsLineHeight * ( i - userScrollBar . getVisibleStart ( ) ) ) ;
}
}
2010-12-23 01:00:30 +01:00
}
2010-12-29 22:03:57 +01:00
safeMutexIRCPtr . ReleaseLock ( ) ;
2010-12-31 18:16:49 +01:00
if ( serverInfoString ! = " empty " )
{
rebuildServerLines ( serverInfoString ) ;
serverInfoString = " empty " ;
}
serverScrollBar . setElementCount ( serverLines . size ( ) ) ;
if ( serverScrollBar . getElementCount ( ) ! = 0 ) {
for ( int i = serverScrollBar . getVisibleStart ( ) ; i < = serverScrollBar . getVisibleEnd ( ) ; + + i ) {
serverLines [ i ] - > setY ( serverLinesYBase - serverLinesLineHeight * ( i - serverScrollBar . getVisibleStart ( ) ) ) ;
}
}
2010-12-23 01:00:30 +01:00
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 {
2012-04-14 23:21:09 +02:00
throw megaglest_runtime_error ( sError . c_str ( ) ) ;
2010-05-16 05:31:12 +02:00
}
}
2010-05-09 23:23:13 +02:00
}
2011-01-02 07:46:48 +01:00
void MenuStateMasterserver : : simpleTask ( BaseThread * callingThread ) {
if ( callingThread - > getQuitStatus ( ) = = true ) {
2010-12-05 02:52:38 +01:00
return ;
}
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutex ( callingThread - > getMutexThreadObjectAccessor ( ) , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2010-06-26 10:04:11 +02:00
bool needUpdate = needUpdateFromServer ;
if ( needUpdate = = true ) {
2011-01-02 07:46:48 +01:00
try {
2010-10-30 19:31:57 +02:00
2011-01-02 07:46:48 +01:00
if ( callingThread - > getQuitStatus ( ) = = true ) {
return ;
}
2010-06-26 10:04:11 +02:00
2011-01-02 07:46:48 +01:00
needUpdateFromServer = false ;
if ( announcementLoaded = = false ) {
string announcementURL = Config : : getInstance ( ) . getString ( " AnnouncementURL " , " http://master.megaglest.org/files/announcement.txt " ) ;
if ( announcementURL ! = " " ) {
safeMutex . ReleaseLock ( true ) ;
2011-01-18 00:45:09 +01:00
CURL * handle = SystemFlags : : initHTTP ( ) ;
std : : string announcementTxt = SystemFlags : : getHTTP ( announcementURL , handle ) ;
SystemFlags : : cleanupHTTP ( & handle ) ;
2011-01-02 07:46:48 +01:00
if ( callingThread - > getQuitStatus ( ) = = true ) {
return ;
}
safeMutex . Lock ( ) ;
if ( StartsWith ( announcementTxt , " Announcement from Masterserver: " ) = = true ) {
int newlineCount = 0 ;
size_t lastIndex = 0 ;
//announcementLabel.setText(announcementTxt);
2011-03-26 18:17:34 +01:00
consoleIRC . addLine ( announcementTxt , true , Vec3f ( 1.0f , 1.0f , 0.0f ) ) ;
2011-01-02 07:46:48 +01:00
while ( true ) {
lastIndex = announcementTxt . find ( " \n " , lastIndex + 1 ) ;
if ( lastIndex = = string : : npos ) {
break ;
}
else {
newlineCount + + ;
}
}
newlineCount - - ; // remove my own line
for ( int i = 0 ; i < newlineCount ; + + i ) {
consoleIRC . addLine ( " " ) ;
}
}
}
consoleIRC . addLine ( " --------------------------------------------- " ) ;
string versionURL = Config : : getInstance ( ) . getString ( " VersionURL " , " http://master.megaglest.org/files/versions/ " ) + glestVersionString + " .txt " ;
//printf("\nversionURL=%s\n",versionURL.c_str());
if ( versionURL ! = " " ) {
safeMutex . ReleaseLock ( true ) ;
2011-01-18 00:45:09 +01:00
CURL * handle = SystemFlags : : initHTTP ( ) ;
std : : string versionTxt = SystemFlags : : getHTTP ( versionURL , handle ) ;
SystemFlags : : cleanupHTTP ( & handle ) ;
2011-01-02 07:46:48 +01:00
if ( callingThread - > getQuitStatus ( ) = = true ) {
return ;
}
safeMutex . Lock ( ) ;
if ( StartsWith ( versionTxt , " Version info: " ) = = true ) {
int newlineCount = 0 ;
size_t lastIndex = 0 ;
//versionInfoLabel.setText(versionTxt);
2011-03-26 18:17:34 +01:00
consoleIRC . addLine ( versionTxt , true , Vec3f ( 1.0f , 0.0f , 0.0f ) ) ;
2011-01-02 07:46:48 +01:00
while ( true ) {
lastIndex = versionTxt . find ( " \n " , lastIndex + 1 ) ;
if ( lastIndex = = string : : npos ) {
break ;
}
else {
newlineCount + + ;
}
}
newlineCount - - ; // remove my own line
for ( int i = 0 ; i < newlineCount ; + + i ) {
consoleIRC . addLine ( " " ) ;
}
}
}
consoleIRC . addLine ( " --------------------------------------------- " ) ;
// write hint to console:
Config & configKeys = Config : : getInstance ( std : : pair < ConfigType , ConfigType > ( cfgMainKeys , cfgUserKeys ) ) ;
2012-10-11 02:26:00 +02:00
consoleIRC . addLine ( Lang : : getInstance ( ) . get ( " ToSwitchOffMusicPress " ) + " - \" " + configKeys . getString ( " ToggleMusic " ) + " \" " ) ;
2011-01-02 07:46:48 +01:00
announcementLoaded = true ;
}
2010-12-29 22:03:57 +01:00
2011-09-01 03:11:23 +02:00
//Lang &lang= Lang::getInstance();
2011-01-02 07:46:48 +01:00
try {
if ( Config : : getInstance ( ) . getString ( " Masterserver " , " " ) ! = " " ) {
2010-10-06 22:54:08 +02:00
2011-01-02 07:46:48 +01:00
safeMutex . ReleaseLock ( true ) ;
2011-01-18 00:45:09 +01:00
CURL * handle = SystemFlags : : initHTTP ( ) ;
std : : string localServerInfoString = SystemFlags : : getHTTP ( Config : : getInstance ( ) . getString ( " Masterserver " ) + " showServersForGlest.php " , handle ) ;
SystemFlags : : cleanupHTTP ( & handle ) ;
2011-01-02 07:46:48 +01:00
if ( callingThread - > getQuitStatus ( ) = = true ) {
return ;
}
safeMutex . Lock ( ) ;
2010-12-31 18:16:49 +01:00
2011-01-02 07:46:48 +01:00
serverInfoString = localServerInfoString ;
}
}
catch ( const exception & ex ) {
serverInfoString = ex . what ( ) ;
2012-03-03 09:28:15 +01:00
SystemFlags : : OutputDebug ( SystemFlags : : debugError , " In [%s::%s Line %d] error during Internet game status update: [%s] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ , ex . what ( ) ) ;
2010-12-20 17:45:31 +01:00
}
}
2011-01-02 07:46:48 +01:00
catch ( const exception & e ) {
2012-03-03 09:28:15 +01:00
SystemFlags : : OutputDebug ( SystemFlags : : debugError , " In [%s::%s Line: %d] Error [%s] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ , e . what ( ) ) ;
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] Line: %d, error [%s] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ , e . what ( ) ) ;
2011-01-02 07:46:48 +01:00
threadedErrorMsg = e . what ( ) ;
}
2010-05-15 20:49:45 +02:00
}
2010-05-09 23:23:13 +02:00
}
2011-01-02 07:46:48 +01:00
void MenuStateMasterserver : : rebuildServerLines ( const string & serverInfo ) {
2010-12-31 18:16:49 +01:00
int numberOfOldServerLines = serverLines . size ( ) ;
clearServerLines ( ) ;
Lang & lang = Lang : : getInstance ( ) ;
try {
if ( serverInfo ! = " " ) {
2011-01-25 23:03:04 +01:00
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " --------------> serverInfo [%s] \n " , serverInfo . c_str ( ) ) ;
2012-07-07 01:18:30 +02:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2011-01-25 08:41:12 +01:00
2010-12-31 18:16:49 +01:00
std : : vector < std : : string > serverList ;
Tokenize ( serverInfo , serverList , " \n " ) ;
for ( int i = 0 ; i < serverList . size ( ) ; i + + ) {
string & server = serverList [ i ] ;
2011-03-25 11:11:16 +01:00
if ( trim ( server ) = = " " ) {
continue ;
}
2010-12-31 18:16:49 +01:00
std : : vector < std : : string > serverEntities ;
Tokenize ( server , serverEntities , " | " ) ;
2011-01-25 23:03:04 +01:00
const int MIN_FIELDS_EXPECTED = 14 ;
2010-12-31 18:16:49 +01:00
2012-11-10 07:37:23 +01:00
if ( SystemFlags : : VERBOSE_MODE_ENABLED ) printf ( " --------------> server [%s] serverEntities.size() = " MG_SIZE_T_SPECIFIER " MIN_FIELDS_EXPECTED = %d \n " , server . c_str ( ) , serverEntities . size ( ) , MIN_FIELDS_EXPECTED ) ;
2011-01-25 08:41:12 +01:00
2010-12-31 18:16:49 +01:00
if ( serverEntities . size ( ) > = MIN_FIELDS_EXPECTED ) {
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 ] ) ) ;
masterServerInfo - > setExternalConnectPort ( strToInt ( serverEntities [ 11 ] ) ) ;
2011-01-25 08:41:12 +01:00
masterServerInfo - > setCountry ( serverEntities [ 12 ] ) ;
masterServerInfo - > setStatus ( strToInt ( serverEntities [ 13 ] ) ) ;
//printf("--------------> Country [%s] Status [%d]\n",masterServerInfo->getCountry().c_str(),masterServerInfo->getStatus());
2010-12-31 18:16:49 +01: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);
2012-10-19 03:31:20 +02:00
char szBuf [ 8096 ] = " " ;
snprintf ( szBuf , 8096 , " %s " , masterServerInfo - > getServerTitle ( ) . c_str ( ) ) ;
2010-12-31 18:16:49 +01:00
masterServerInfo - > setServerTitle ( szBuf ) ;
2012-07-07 01:18:30 +02:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
serverLines . push_back ( new ServerLine ( masterServerInfo , i , serverLinesYBase , serverLinesLineHeight , containerName ) ) ;
}
else {
2012-07-07 01:18:30 +02:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
Lang & lang = Lang : : getInstance ( ) ;
2011-01-25 23:03:04 +01:00
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) + " [ " + intToStr ( serverEntities . size ( ) ) + " ][ " + intToStr ( MIN_FIELDS_EXPECTED ) + " ] [ " + serverInfo + " ] " ) ;
2010-12-31 18:16:49 +01:00
2012-03-03 09:28:15 +01:00
if ( masterserverParseErrorShown = = false ) {
masterserverParseErrorShown = true ;
SystemFlags : : OutputDebug ( SystemFlags : : debugError , " In [%s::%s Line %d] error, no masterserver defined! \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
}
2010-12-31 18:16:49 +01:00
}
2012-07-07 01:18:30 +02:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
}
2012-07-07 01:18:30 +02:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s Line: %d] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ ) ;
2010-12-31 18:16:49 +01:00
}
}
catch ( const exception & ex ) {
labelTitle . setText ( " *** " + lang . get ( " AvailableServers " ) + " [ " + ex . what ( ) + " ] " ) ;
2012-03-03 09:28:15 +01:00
SystemFlags : : OutputDebug ( SystemFlags : : debugError , " In [%s::%s Line %d] error during Internet game status update: [%s] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , __LINE__ , ex . what ( ) ) ;
2010-12-31 18:16:49 +01:00
}
if ( serverLines . size ( ) > numberOfOldServerLines ) {
playServerFoundSound = true ;
}
}
2011-03-29 11:45:15 +02:00
bool MenuStateMasterserver : : connectToServer ( string ipString , int port ) {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] START ipString='%s' \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , ipString . c_str ( ) ) ;
2010-05-09 23:23:13 +02:00
ClientInterface * clientInterface = NetworkManager : : getInstance ( ) . getClientInterface ( ) ;
2011-09-01 03:11:23 +02:00
//Config& config= Config::getInstance();
2010-05-09 23:23:13 +02:00
Ip serverIp ( ipString ) ;
2012-10-06 14:56:53 +02:00
//int serverPort = Config::getInstance().getInt("PortServer",intToStr(GameConstants::serverPort).c_str());
2010-07-03 12:06:31 +02:00
int serverPort = port ;
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] try to connect to [%s] serverPort = %d \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , serverIp . getString ( ) . c_str ( ) , serverPort ) ;
2010-05-17 22:41:18 +02:00
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 ) ;
2010-12-20 17:45:31 +01:00
2010-05-09 23:23:13 +02:00
mainMessageBoxState = 1 ;
Lang & lang = Lang : : getInstance ( ) ;
2012-10-11 02:26:00 +02:00
showMessageBox ( lang . get ( " CouldNotConnect " ) , lang . get ( " ConnectionFailed " ) , false ) ;
2010-06-18 20:47:20 +02:00
return false ;
2010-12-20 17:45:31 +01:00
2012-04-16 21:29:37 +02:00
//if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] connection failed\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__);
2010-05-09 23:23:13 +02:00
}
2010-07-03 12:06:31 +02:00
else {
2012-03-03 09:28:15 +01:00
if ( SystemFlags : : getSystemSettingType ( SystemFlags : : debugSystem ) . enabled ) SystemFlags : : OutputDebug ( SystemFlags : : debugSystem , " In [%s::%s] connected to [%s] \n " , extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) , __FUNCTION__ , serverIp . getString ( ) . c_str ( ) ) ;
2010-12-20 17:45:31 +01:00
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
2011-01-15 20:22:59 +01:00
for ( time_t elapsedWait = time ( NULL ) ;
clientInterface - > getIntroDone ( ) = = false & &
clientInterface - > isConnected ( ) & &
2012-02-10 07:21:06 +01:00
difftime ( time ( NULL ) , elapsedWait ) < = 8 ; ) {
2011-01-15 20:22:59 +01:00
if ( clientInterface - > isConnected ( ) ) {
//update lobby
clientInterface - > updateLobby ( ) ;
2012-02-10 07:21:06 +01:00
sleep ( 0 ) ;
2012-07-10 22:39:21 +02:00
//this->render();
2011-01-15 20:22:59 +01:00
}
}
if ( clientInterface - > isConnected ( ) = = true & &
clientInterface - > getIntroDone ( ) = = true ) {
return true ;
}
return false ;
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 ) ;
}
}
2011-06-26 03:55:08 +02:00
void MenuStateMasterserver : : keyDown ( SDL_KeyboardEvent key ) {
2010-09-04 01:54:11 +02:00
Config & configKeys = Config : : getInstance ( std : : pair < ConfigType , ConfigType > ( cfgMainKeys , cfgUserKeys ) ) ;
2011-01-03 00:53:59 +01:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
//chatmanger only if connected to irc!
if ( chatManager . getEditEnabled ( ) = = true ) {
//printf("keyDown key [%d] chatManager.getText() [%s]\n",key,chatManager.getText().c_str());
2012-03-03 09:28:15 +01:00
MutexSafeWrapper safeMutexIRCPtr ( & mutexIRCClient , string ( extractFileFromDirectoryPath ( __FILE__ ) . c_str ( ) ) + " _ " + intToStr ( __LINE__ ) ) ;
2011-06-26 03:55:08 +02:00
//if (key == vkReturn && ircClient != NULL) {
if ( isKeyPressed ( SDLK_RETURN , key ) = = true & & ircClient ! = NULL ) {
2011-01-03 00:53:59 +01:00
ircClient - > SendIRCCmdMessage ( IRC_CHANNEL , chatManager . getText ( ) ) ;
}
}
2010-12-20 17:45:31 +01:00
2011-01-03 00:53:59 +01:00
chatManager . keyDown ( key ) ;
}
2010-12-23 01:00:30 +01:00
if ( chatManager . getEditEnabled ( ) = = false ) {
2011-06-26 03:55:08 +02:00
//if(key == configKeys.getCharKey("ToggleMusic")) {
if ( isKeyPressed ( configKeys . getSDLKey ( " ToggleMusic " ) , key ) = = true ) {
2010-12-23 01:00:30 +01:00
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 ) ;
2010-12-23 08:42:15 +01:00
consoleIRC . addLine ( lang . get ( " GameMusic " ) + " " + lang . get ( " Off " ) ) ;
2010-12-23 01:00:30 +01:00
}
else {
CoreData : : getInstance ( ) . getMenuMusic ( ) - > setVolume ( configVolume ) ;
//If the config says zero, use the default music volume
//gameMusic->setVolume(configVolume ? configVolume : 0.9);
2010-12-23 08:42:15 +01:00
consoleIRC . addLine ( lang . get ( " GameMusic " ) ) ;
2010-12-23 01:00:30 +01:00
}
}
2011-06-26 03:55:08 +02:00
//else if(key == configKeys.getCharKey("SaveGUILayout")) {
else if ( isKeyPressed ( configKeys . getSDLKey ( " SaveGUILayout " ) , key ) = = true ) {
2010-12-23 01:00:30 +01:00
bool saved = GraphicComponent : : saveAllCustomProperties ( containerName ) ;
Lang & lang = Lang : : getInstance ( ) ;
2010-12-23 08:42:15 +01:00
consoleIRC . addLine ( lang . get ( " GUILayoutSaved " ) + " [ " + ( saved ? lang . get ( " Yes " ) : lang . get ( " No " ) ) + " ] " ) ;
2010-12-23 01:00:30 +01:00
}
}
}
2011-06-26 03:55:08 +02:00
void MenuStateMasterserver : : keyPress ( SDL_KeyboardEvent c ) {
2011-01-03 00:53:59 +01:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
chatManager . keyPress ( c ) ;
}
2010-09-04 01:54:11 +02:00
}
2011-06-26 03:55:08 +02:00
void MenuStateMasterserver : : keyUp ( SDL_KeyboardEvent key ) {
2011-01-03 00:53:59 +01:00
if ( ircClient ! = NULL & & ircClient - > isConnected ( ) = = true
& & ircClient - > getHasJoinedChannel ( ) = = true ) {
chatManager . keyUp ( key ) ;
2010-09-04 01:54:11 +02:00
2011-01-03 00:53:59 +01:00
if ( chatManager . getEditEnabled ( ) ) {
//send key to the chat manager
chatManager . keyUp ( key ) ;
}
}
2010-12-23 01:00:30 +01:00
}
2010-09-04 01:54:11 +02:00
2010-05-09 23:23:13 +02:00
} } //end namespace