- added the beginning of some new master server info (very limited)
- Masterserver menu will show more titles / colors. - We keep the game showing in the Masterserver menu while it is in progress. - Disable join button when slots are full. - Update title with IN PROGRESS when game is being played. - PHP Script is backwards compatible with older clients
This commit is contained in:
parent
fd3a8e4705
commit
ae8571a406
|
@ -8,16 +8,16 @@ AnnouncementURL=http://megaglest.pepper.freeit.org/announcement.txt
|
|||
AutoMaxFullScreen=false
|
||||
AutoTest=false
|
||||
CheckGlCaps=true
|
||||
ColorBits=32
|
||||
ColorBits=32
|
||||
ConsoleMaxLines=7
|
||||
ConsoleMaxLinesStored=20
|
||||
ConsoleTimeout=20
|
||||
DayTime=1000
|
||||
DebugLogFile=debug.log
|
||||
DebugMode=false
|
||||
DebugMode=false
|
||||
DebugPerformance=false
|
||||
DebugNetwork=false
|
||||
DebugWorldSynch=false
|
||||
DebugNetwork=false
|
||||
DebugWorldSynch=false
|
||||
DepthBits=16
|
||||
FactoryGraphics=OpenGL
|
||||
FactorySound=OpenAL
|
||||
|
@ -46,16 +46,17 @@ FontSizeAdjustment=0
|
|||
Lang=english
|
||||
MaxLights=3
|
||||
;Masterserver=http://soft-haus.com/glest/cgi-bin/
|
||||
Masterserver=http://192.168.0.107/glest/
|
||||
;MasterServerExternalPortList=80,143,587,21,110,25,443,993,995
|
||||
Masterserver=http://megaglest.pepper.freeit.org/masterserver/
|
||||
;Masterserver=http://megaglest.pepper.freeit.org/masterserver/
|
||||
MasterServerExternalPortList=61357,61358,61359,61360,61000,80,143,587,21,110,25,443,993,995,1080,8080
|
||||
NetPlayerName=newbie
|
||||
NetPlayerName=newbie
|
||||
NetworkConsistencyChecks=true
|
||||
PhotoMode=false
|
||||
RefreshFrequency=75
|
||||
ScreenHeight=768
|
||||
ScreenWidth=1024
|
||||
ServerIp=192.168.0.107
|
||||
ScreenHeight=768
|
||||
ScreenWidth=1024
|
||||
ServerIp=192.168.0.107
|
||||
ServerPort=61357
|
||||
ShadowAlpha=0.2
|
||||
ShadowFrameSkip=2
|
||||
|
@ -67,7 +68,7 @@ SoundVolumeAmbient=80
|
|||
SoundVolumeFx=80
|
||||
SoundVolumeMusic=90
|
||||
StencilBits=0
|
||||
Textures3D=true
|
||||
Textures3D=true
|
||||
UnitParticles=true
|
||||
UserData_Root=mydata/
|
||||
Windowed=false
|
||||
Windowed=false
|
||||
|
|
|
@ -3,11 +3,12 @@
|
|||
|
||||
#include <cassert>
|
||||
#include <stdio.h>
|
||||
#include "vec.h"
|
||||
|
||||
// ==============================================================
|
||||
// This file is part of Glest (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Marti<EFBFBD>o Figueroa
|
||||
// Copyright (C) 2001-2008 Martiño Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
|
@ -15,12 +16,24 @@
|
|||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
using namespace Shared::Graphics;
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
// =====================================================
|
||||
// class GameConstants
|
||||
// =====================================================
|
||||
|
||||
const Vec4f BLACK(0, 0, 0, 1);
|
||||
const Vec4f RED(1, 0, 0, 1);
|
||||
const Vec4f GREEN(0, 1, 0, 1);
|
||||
const Vec4f BLUE(0, 0, 1, 1);
|
||||
const Vec4f GLASS(1, 1, 1, 0.3);
|
||||
const Vec4f CYAN(0, 1, 1, 1);
|
||||
const Vec4f YELLOW(1, 1, 0, 1);
|
||||
const Vec4f MAGENTA(1, 0, 1, 1);
|
||||
const Vec4f WHITE(1, 1, 1, 1);
|
||||
|
||||
enum PathFinderType {
|
||||
pfBasic,
|
||||
pfRoutePlanner
|
||||
|
|
|
@ -41,8 +41,8 @@ ServerLine::ServerLine( MasterServerInfo *mServerInfo, int lineIndex, const char
|
|||
Lang &lang= Lang::getInstance();
|
||||
|
||||
index=lineIndex;
|
||||
int lineOffset=25*lineIndex;
|
||||
masterServerInfo=mServerInfo;
|
||||
int lineOffset = 25 * lineIndex;
|
||||
masterServerInfo = *mServerInfo;
|
||||
int i=10;
|
||||
int startOffset=600;
|
||||
|
||||
|
@ -51,63 +51,63 @@ ServerLine::ServerLine( MasterServerInfo *mServerInfo, int lineIndex, const char
|
|||
glestVersionLabel.registerGraphicComponent(containerName,"glestVersionLabel" + intToStr(lineIndex));
|
||||
registeredObjNameList.push_back("glestVersionLabel" + intToStr(lineIndex));
|
||||
glestVersionLabel.init(i,startOffset-lineOffset);
|
||||
glestVersionLabel.setText(masterServerInfo->getGlestVersion());
|
||||
glestVersionLabel.setText(masterServerInfo.getGlestVersion());
|
||||
|
||||
i+=80;
|
||||
registeredObjNameList.push_back("platformLabel" + intToStr(lineIndex));
|
||||
platformLabel.registerGraphicComponent(containerName,"platformLabel" + intToStr(lineIndex));
|
||||
platformLabel.init(i,startOffset-lineOffset);
|
||||
platformLabel.setText(masterServerInfo->getPlatform());
|
||||
platformLabel.setText(masterServerInfo.getPlatform());
|
||||
|
||||
i+=50;
|
||||
registeredObjNameList.push_back("binaryCompileDateLabel" + intToStr(lineIndex));
|
||||
binaryCompileDateLabel.registerGraphicComponent(containerName,"binaryCompileDateLabel" + intToStr(lineIndex));
|
||||
binaryCompileDateLabel.init(i,startOffset-lineOffset);
|
||||
binaryCompileDateLabel.setText(masterServerInfo->getBinaryCompileDate());
|
||||
binaryCompileDateLabel.setText(masterServerInfo.getBinaryCompileDate());
|
||||
|
||||
//game info:
|
||||
i+=130;
|
||||
registeredObjNameList.push_back("serverTitleLabel" + intToStr(lineIndex));
|
||||
serverTitleLabel.registerGraphicComponent(containerName,"serverTitleLabel" + intToStr(lineIndex));
|
||||
serverTitleLabel.init(i,startOffset-lineOffset);
|
||||
serverTitleLabel.setText(masterServerInfo->getServerTitle());
|
||||
serverTitleLabel.setText(masterServerInfo.getServerTitle());
|
||||
|
||||
i+=160;
|
||||
registeredObjNameList.push_back("ipAddressLabel" + intToStr(lineIndex));
|
||||
ipAddressLabel.registerGraphicComponent(containerName,"ipAddressLabel" + intToStr(lineIndex));
|
||||
ipAddressLabel.init(i,startOffset-lineOffset);
|
||||
ipAddressLabel.setText(masterServerInfo->getIpAddress());
|
||||
ipAddressLabel.setText(masterServerInfo.getIpAddress());
|
||||
|
||||
//game setup info:
|
||||
i+=100;
|
||||
registeredObjNameList.push_back("techLabel" + intToStr(lineIndex));
|
||||
techLabel.registerGraphicComponent(containerName,"techLabel" + intToStr(lineIndex));
|
||||
techLabel.init(i,startOffset-lineOffset);
|
||||
techLabel.setText(masterServerInfo->getTech());
|
||||
techLabel.setText(masterServerInfo.getTech());
|
||||
|
||||
i+=100;
|
||||
registeredObjNameList.push_back("mapLabel" + intToStr(lineIndex));
|
||||
mapLabel.registerGraphicComponent(containerName,"mapLabel" + intToStr(lineIndex));
|
||||
mapLabel.init(i,startOffset-lineOffset);
|
||||
mapLabel.setText(masterServerInfo->getMap());
|
||||
mapLabel.setText(masterServerInfo.getMap());
|
||||
|
||||
i+=100;
|
||||
registeredObjNameList.push_back("tilesetLabel" + intToStr(lineIndex));
|
||||
tilesetLabel.registerGraphicComponent(containerName,"tilesetLabel" + intToStr(lineIndex));
|
||||
tilesetLabel.init(i,startOffset-lineOffset);
|
||||
tilesetLabel.setText(masterServerInfo->getTileset());
|
||||
tilesetLabel.setText(masterServerInfo.getTileset());
|
||||
|
||||
i+=100;
|
||||
registeredObjNameList.push_back("activeSlotsLabel" + intToStr(lineIndex));
|
||||
activeSlotsLabel.registerGraphicComponent(containerName,"activeSlotsLabel" + intToStr(lineIndex));
|
||||
activeSlotsLabel.init(i,startOffset-lineOffset);
|
||||
activeSlotsLabel.setText(intToStr(masterServerInfo->getActiveSlots())+"/"+intToStr(masterServerInfo->getNetworkSlots())+"/"+intToStr(masterServerInfo->getConnectedClients()));
|
||||
activeSlotsLabel.setText(intToStr(masterServerInfo.getActiveSlots())+"/"+intToStr(masterServerInfo.getNetworkSlots())+"/"+intToStr(masterServerInfo.getConnectedClients()));
|
||||
|
||||
i+=50;
|
||||
registeredObjNameList.push_back("externalConnectPort" + intToStr(lineIndex));
|
||||
externalConnectPort.registerGraphicComponent(containerName,"externalConnectPort" + intToStr(lineIndex));
|
||||
externalConnectPort.init(i,startOffset-lineOffset);
|
||||
externalConnectPort.setText(intToStr(masterServerInfo->getExternalConnectPort()));
|
||||
externalConnectPort.setText(intToStr(masterServerInfo.getExternalConnectPort()));
|
||||
|
||||
i+=50;
|
||||
registeredObjNameList.push_back("selectButton" + intToStr(lineIndex));
|
||||
|
@ -116,16 +116,23 @@ ServerLine::ServerLine( MasterServerInfo *mServerInfo, int lineIndex, const char
|
|||
selectButton.setText(">");
|
||||
|
||||
//printf("glestVersionString [%s] masterServerInfo->getGlestVersion() [%s]\n",glestVersionString.c_str(),masterServerInfo->getGlestVersion().c_str());
|
||||
bool compatible = checkVersionComptability(glestVersionString, masterServerInfo->getGlestVersion());
|
||||
bool compatible = checkVersionComptability(glestVersionString, masterServerInfo.getGlestVersion());
|
||||
selectButton.setEnabled(compatible);
|
||||
selectButton.setEditable(compatible);
|
||||
|
||||
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);
|
||||
|
||||
GraphicComponent::applyAllCustomProperties(containerName);
|
||||
}
|
||||
|
||||
ServerLine::~ServerLine() {
|
||||
GraphicComponent::clearRegisterGraphicComponent(containerName, registeredObjNameList);
|
||||
delete masterServerInfo;
|
||||
//delete masterServerInfo;
|
||||
}
|
||||
|
||||
bool ServerLine::buttonMouseClick(int x, int y){
|
||||
|
@ -136,10 +143,29 @@ bool ServerLine::buttonMouseMove(int x, int y){
|
|||
return selectButton.mouseMove(x,y);
|
||||
}
|
||||
|
||||
void ServerLine::render(){
|
||||
void ServerLine::render() {
|
||||
Renderer &renderer= Renderer::getInstance();
|
||||
|
||||
renderer.renderButton(&selectButton);
|
||||
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);
|
||||
}
|
||||
|
||||
//general info:
|
||||
renderer.renderLabel(&glestVersionLabel);
|
||||
renderer.renderLabel(&platformLabel);
|
||||
|
@ -209,6 +235,72 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||
labelChatUrl.init(150,buttonPos-50);
|
||||
labelChatUrl.setFont(CoreData::getInstance().getMenuFontBig());
|
||||
labelChatUrl.setText(lang.get("NoServerVisitChat")+": http://webchat.freenode.net/?channels=glest");
|
||||
|
||||
// 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
|
||||
|
||||
buttonReturn.registerGraphicComponent(containerName,"buttonReturn");
|
||||
buttonReturn.init(50, buttonPos, 150);
|
||||
|
@ -399,20 +491,44 @@ void MenuStateMasterserver::render(){
|
|||
Renderer &renderer= Renderer::getInstance();
|
||||
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
if(mainMessageBox.getEnabled()){
|
||||
if(mainMessageBox.getEnabled()) {
|
||||
renderer.renderMessageBox(&mainMessageBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderer.renderButton(&buttonRefresh);
|
||||
renderer.renderButton(&buttonReturn);
|
||||
renderer.renderLabel(&labelTitle);
|
||||
renderer.renderLabel(&announcementLabel);
|
||||
|
||||
renderer.renderLabel(&labelTitle,&GREEN);
|
||||
renderer.renderLabel(&announcementLabel,&YELLOW);
|
||||
renderer.renderLabel(&versionInfoLabel);
|
||||
|
||||
renderer.renderLabel(&labelAutoRefresh);
|
||||
renderer.renderLabel(&labelChatUrl);
|
||||
renderer.renderButton(&buttonCreateGame);
|
||||
renderer.renderListBox(&listBoxAutoRefresh);
|
||||
|
||||
// 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);
|
||||
|
||||
|
||||
// render console
|
||||
renderer.renderConsole(&console,false,false);
|
||||
|
||||
|
|
|
@ -28,9 +28,10 @@ namespace Glest{ namespace Game{
|
|||
class ServerLine {
|
||||
private:
|
||||
|
||||
MasterServerInfo *masterServerInfo;
|
||||
MasterServerInfo masterServerInfo;
|
||||
int index;
|
||||
GraphicButton selectButton;
|
||||
GraphicLabel gameFull;
|
||||
|
||||
//general info:
|
||||
GraphicLabel glestVersionLabel;
|
||||
|
@ -55,7 +56,7 @@ private:
|
|||
public:
|
||||
ServerLine( MasterServerInfo *mServerInfo, int lineIndex, const char *containerName);
|
||||
virtual ~ServerLine();
|
||||
MasterServerInfo *getMasterServerInfo() const {return masterServerInfo;}
|
||||
MasterServerInfo *getMasterServerInfo() {return &masterServerInfo;}
|
||||
const int getIndex() const {return index;}
|
||||
bool buttonMouseClick(int x, int y);
|
||||
bool buttonMouseMove(int x, int y);
|
||||
|
@ -88,6 +89,27 @@ private:
|
|||
GraphicLabel announcementLabel;
|
||||
GraphicLabel versionInfoLabel;
|
||||
|
||||
|
||||
|
||||
GraphicLabel glestVersionLabel;
|
||||
GraphicLabel platformLabel;
|
||||
GraphicLabel binaryCompileDateLabel;
|
||||
|
||||
//game info:
|
||||
GraphicLabel serverTitleLabel;
|
||||
GraphicLabel ipAddressLabel;
|
||||
|
||||
//game setup info:
|
||||
GraphicLabel techLabel;
|
||||
GraphicLabel mapLabel;
|
||||
GraphicLabel tilesetLabel;
|
||||
GraphicLabel activeSlotsLabel;
|
||||
|
||||
GraphicLabel externalConnectPort;
|
||||
|
||||
GraphicLabel selectButton;
|
||||
|
||||
|
||||
|
||||
GraphicMessageBox mainMessageBox;
|
||||
int mainMessageBoxState;
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "logger.h"
|
||||
#include <time.h>
|
||||
#include "util.h"
|
||||
|
||||
#include "game_util.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace std;
|
||||
|
@ -59,11 +59,13 @@ double LAG_CHECK_GRACE_PERIOD = 15;
|
|||
// badly and we want to give time for them to catch up
|
||||
double MAX_CLIENT_WAIT_SECONDS_FOR_PAUSE = 2;
|
||||
|
||||
ServerInterface::ServerInterface(){
|
||||
ServerInterface::ServerInterface() {
|
||||
gameHasBeenInitiated = false;
|
||||
gameSettingsUpdateCount = 0;
|
||||
currentFrameCount = 0;
|
||||
gameStartTime = 0;
|
||||
publishToMasterserverThread = NULL;
|
||||
lastMasterserverHeartbeatTime = 0;
|
||||
|
||||
enabledThreadedClientCommandBroadcast = Config::getInstance().getBool("EnableThreadedClientCommandBroadcast","false");
|
||||
maxFrameCountLagAllowed = Config::getInstance().getInt("MaxFrameCountLagAllowed",intToStr(maxFrameCountLagAllowed).c_str());
|
||||
|
@ -82,7 +84,7 @@ ServerInterface::ServerInterface(){
|
|||
serverSocket.setBindPort(Config::getInstance().getInt("ServerPort",intToStr(GameConstants::serverPort).c_str()));
|
||||
}
|
||||
|
||||
ServerInterface::~ServerInterface(){
|
||||
ServerInterface::~ServerInterface() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
for(int i= 0; i<GameConstants::maxPlayers; ++i){
|
||||
|
@ -97,6 +99,13 @@ ServerInterface::~ServerInterface(){
|
|||
|
||||
close();
|
||||
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
delete publishToMasterserverThread;
|
||||
publishToMasterserverThread = NULL;
|
||||
safeMutex.ReleaseLock();
|
||||
// This triggers a gameOVer message to be sent to the masterserver
|
||||
simpleTask();
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
|
@ -202,7 +211,7 @@ void ServerInterface::removeSlot(int playerIndex) {
|
|||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,playerIndex);
|
||||
}
|
||||
|
||||
ConnectionSlot* ServerInterface::getSlot(int playerIndex){
|
||||
ConnectionSlot* ServerInterface::getSlot(int playerIndex) {
|
||||
return slots[playerIndex];
|
||||
}
|
||||
|
||||
|
@ -218,10 +227,10 @@ bool ServerInterface::hasClientConnection() {
|
|||
return result;
|
||||
}
|
||||
|
||||
int ServerInterface::getConnectedSlotCount(){
|
||||
int ServerInterface::getConnectedSlotCount() {
|
||||
int connectedSlotCount= 0;
|
||||
|
||||
for(int i= 0; i<GameConstants::maxPlayers; ++i){
|
||||
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
|
||||
if(slots[i]!= NULL){
|
||||
++connectedSlotCount;
|
||||
}
|
||||
|
@ -870,7 +879,7 @@ bool ServerInterface::shouldDiscardNetworkMessage(NetworkMessageType networkMess
|
|||
return discard;
|
||||
}
|
||||
|
||||
void ServerInterface::waitUntilReady(Checksum* checksum){
|
||||
void ServerInterface::waitUntilReady(Checksum* checksum) {
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s] START\n",__FUNCTION__);
|
||||
|
||||
|
@ -989,8 +998,7 @@ void ServerInterface::sendTextMessage(const string &text, int teamIndex, bool ec
|
|||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
void ServerInterface::quitGame(bool userManuallyQuit)
|
||||
{
|
||||
void ServerInterface::quitGame(bool userManuallyQuit) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
if(userManuallyQuit == true) {
|
||||
|
@ -1041,33 +1049,36 @@ string ServerInterface::getNetworkStatus() {
|
|||
return str;
|
||||
}
|
||||
|
||||
bool ServerInterface::launchGame(const GameSettings* gameSettings){
|
||||
|
||||
bool ServerInterface::launchGame(const GameSettings* gameSettings) {
|
||||
bool bOkToStart = true;
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
for(int i= 0; i<GameConstants::maxPlayers; ++i)
|
||||
{
|
||||
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
|
||||
ConnectionSlot *connectionSlot= slots[i];
|
||||
if(connectionSlot != NULL &&
|
||||
connectionSlot->getAllowDownloadDataSynch() == true &&
|
||||
connectionSlot->isConnected())
|
||||
{
|
||||
if(connectionSlot->getNetworkGameDataSynchCheckOk() == false)
|
||||
{
|
||||
connectionSlot->isConnected()) {
|
||||
if(connectionSlot->getNetworkGameDataSynchCheckOk() == false) {
|
||||
bOkToStart = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(bOkToStart == true)
|
||||
{
|
||||
if(bOkToStart == true) {
|
||||
serverSocket.stopBroadCastThread();
|
||||
|
||||
NetworkMessageLaunch networkMessageLaunch(gameSettings,nmtLaunch);
|
||||
broadcastMessage(&networkMessageLaunch);
|
||||
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
delete publishToMasterserverThread;
|
||||
publishToMasterserverThread = NULL;
|
||||
|
||||
publishToMasterserverThread = new SimpleTaskThread(this,0,25);
|
||||
publishToMasterserverThread->setUniqueID(__FILE__);
|
||||
publishToMasterserverThread->start();
|
||||
}
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
@ -1378,4 +1389,106 @@ int ServerInterface::getHumanPlayerIndex() const {
|
|||
return gameSettings.getStartLocationIndex(gameSettings.getThisFactionIndex());
|
||||
}
|
||||
|
||||
std::map<string,string> ServerInterface::publishToMasterserver() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
// The server player counts as 1 for each of these
|
||||
int slotCountUsed=1;
|
||||
int slotCountHumans=1;
|
||||
int slotCountConnectedPlayers=1;
|
||||
|
||||
Config &config= Config::getInstance();
|
||||
//string serverinfo="";
|
||||
std::map<string,string> publishToServerInfo;
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
for(int i= 0; i < GameConstants::maxPlayers; ++i) {
|
||||
if(slots[i] != NULL) {
|
||||
slotCountUsed++;
|
||||
slotCountHumans++;
|
||||
ConnectionSlot* connectionSlot= slots[i];
|
||||
if((connectionSlot!=NULL) && (connectionSlot->isConnected())) {
|
||||
slotCountConnectedPlayers++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//?status=waiting&system=linux&info=titus
|
||||
publishToServerInfo["glestVersion"] = glestVersionString;
|
||||
publishToServerInfo["platform"] = getPlatformNameString();
|
||||
publishToServerInfo["binaryCompileDate"] = getCompileDateTime();
|
||||
|
||||
//game info:
|
||||
publishToServerInfo["serverTitle"] = getHumanPlayerName() + "'s game *IN PROGRESS*";
|
||||
//ip is automatically set
|
||||
|
||||
//game setup info:
|
||||
publishToServerInfo["tech"] = this->getGameSettings()->getTech();
|
||||
publishToServerInfo["map"] = this->getGameSettings()->getMap();
|
||||
publishToServerInfo["tileset"] = this->getGameSettings()->getTileset();
|
||||
publishToServerInfo["activeSlots"] = intToStr(slotCountUsed);
|
||||
publishToServerInfo["networkSlots"] = intToStr(slotCountHumans);
|
||||
publishToServerInfo["connectedClients"] = intToStr(slotCountConnectedPlayers);
|
||||
//string externalport = intToStr(Config::getInstance().getInt("ExternalServerPort",intToStr(Config::getInstance().getInt("ServerPort")).c_str()));
|
||||
string externalport = config.getString("MasterServerExternalPort", "61357");
|
||||
publishToServerInfo["externalconnectport"] = externalport;
|
||||
|
||||
if(publishToMasterserverThread == NULL) {
|
||||
publishToServerInfo["serverTitle"] = getHumanPlayerName() + "'s game *FINISHED*";
|
||||
publishToServerInfo["gameCmd"]= "gameOver";
|
||||
}
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
return publishToServerInfo;
|
||||
}
|
||||
|
||||
void ServerInterface::simpleTask() {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
if(difftime(time(NULL),lastMasterserverHeartbeatTime) >= 30) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
lastMasterserverHeartbeatTime = time(NULL);
|
||||
|
||||
bool isNetworkGame = (this->getGameSettings() != NULL && this->getGameSettings()->isNetworkGame());
|
||||
if(isNetworkGame == true) {
|
||||
//string request = Config::getInstance().getString("Masterserver") + "addServerInfo.php?" + newPublishToServerInfo;
|
||||
string request = Config::getInstance().getString("Masterserver") + "addServerInfo.php?";
|
||||
|
||||
std::map<string,string> newPublishToServerInfo = publishToMasterserver();
|
||||
|
||||
CURL *handle = SystemFlags::initHTTP();
|
||||
for(std::map<string,string>::const_iterator iterMap = newPublishToServerInfo.begin();
|
||||
iterMap != newPublishToServerInfo.end(); iterMap++) {
|
||||
|
||||
request += iterMap->first;
|
||||
request += "=";
|
||||
request += SystemFlags::escapeURL(iterMap->second,handle);
|
||||
request += "&";
|
||||
}
|
||||
|
||||
//printf("the request is:\n%s\n",request.c_str());
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the request is:\n%s\n",__FILE__,__FUNCTION__,__LINE__,request.c_str());
|
||||
|
||||
std::string serverInfo = SystemFlags::getHTTP(request,handle);
|
||||
SystemFlags::cleanupHTTP(&handle);
|
||||
|
||||
//printf("the result is:\n'%s'\n",serverInfo.c_str());
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the result is:\n'%s'\n",__FILE__,__FUNCTION__,__LINE__,serverInfo.c_str());
|
||||
|
||||
// uncomment to enable router setup check of this server
|
||||
if(EndsWith(serverInfo, "OK") == false) {
|
||||
//showMasterserverError=true;
|
||||
//masterServererErrorToShow = (serverInfo != "" ? serverInfo : "No Reply");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
|
||||
}}//end namespace
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace Glest{ namespace Game{
|
|||
// class ServerInterface
|
||||
// =====================================================
|
||||
|
||||
class ServerInterface: public GameNetworkInterface, public ConnectionSlotCallbackInterface {
|
||||
class ServerInterface: public GameNetworkInterface, public ConnectionSlotCallbackInterface, public SimpleTaskCallbackInterface {
|
||||
|
||||
private:
|
||||
ConnectionSlot* slots[GameConstants::maxPlayers];
|
||||
|
@ -42,6 +42,10 @@ private:
|
|||
|
||||
time_t gameStartTime;
|
||||
|
||||
SimpleTaskThread *publishToMasterserverThread;
|
||||
Mutex masterServerThreadAccessor;
|
||||
time_t lastMasterserverHeartbeatTime;
|
||||
|
||||
public:
|
||||
ServerInterface();
|
||||
virtual ~ServerInterface();
|
||||
|
@ -103,6 +107,8 @@ public:
|
|||
|
||||
Mutex * getServerSynchAccessor() { return &serverSynchAccessor; }
|
||||
|
||||
virtual void simpleTask();
|
||||
|
||||
private:
|
||||
|
||||
void broadcastMessage(const NetworkMessage* networkMessage, int excludeSlot= -1);
|
||||
|
@ -110,6 +116,8 @@ private:
|
|||
bool shouldDiscardNetworkMessage(NetworkMessageType networkMessageType,ConnectionSlot* connectionSlot);
|
||||
void updateSlot(ConnectionSlotEvent *event);
|
||||
void validateConnectedClients();
|
||||
|
||||
std::map<string,string> publishToMasterserver();
|
||||
};
|
||||
|
||||
}}//end namespace
|
||||
|
|
|
@ -44,6 +44,11 @@
|
|||
$activeSlots = (int) clean_str( $_GET['activeSlots'] );
|
||||
$networkSlots = (int) clean_str( $_GET['networkSlots'] );
|
||||
$connectedClients = (int) clean_str( $_GET['connectedClients'] );
|
||||
|
||||
$gameCmd = "";
|
||||
if(isset($_GET["gameCmd"])) {
|
||||
$gameCmd = (string) clean_str( $_GET['gameCmd'] );
|
||||
}
|
||||
|
||||
define( 'DB_LINK', db_connect() );
|
||||
|
||||
|
@ -57,12 +62,12 @@
|
|||
// Representation starts here (but it should really be starting much later, there is way too much logic behind this point)
|
||||
header( 'Content-Type: text/plain; charset=utf-8' );
|
||||
|
||||
if ( $connectedClients == $networkSlots ) // game servers' slots are all full
|
||||
if ( ($glestVersion <= "3.3.7.2" && $connectedClients == $networkSlots) || $gameCmd == "gameOver") // game servers' slots are all full
|
||||
{ // delete server; no checks are performed
|
||||
mysql_db_query( MYSQL_DATABASE, 'DELETE FROM glestserver WHERE ip=\'' . mysql_real_escape_string( $remote_ip ) . '\' && externalServerPort=\'' . mysql_real_escape_string( $service_port ) . '\';' );
|
||||
echo 'OK' ;
|
||||
}
|
||||
else if ( $remote_ip == $server[0] && $service_port == $server[1] ) // this server is contained in the database
|
||||
else if ( $remote_ip == $server[0] && $service_port == $server[1] ) // this server is contained in the database
|
||||
{ // update database info on this game server; no checks are performed
|
||||
mysql_db_query( MYSQL_DATABASE, 'UPDATE glestserver SET ' .
|
||||
'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' .
|
||||
|
|
Loading…
Reference in New Issue