Added some threading for URL calls for new masterserver game play
This commit is contained in:
parent
55d7c6eebc
commit
57d0420b76
|
@ -53,6 +53,7 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, b
|
|||
Config &config = Config::getInstance();
|
||||
|
||||
needToSetChangedGameSettings = false;
|
||||
needToRepublishToMasterserver = false;
|
||||
lastSetChangedGameSettings = time(NULL);
|
||||
lastMasterserverPublishing = time(NULL);
|
||||
|
||||
|
@ -211,6 +212,15 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, b
|
|||
|
||||
//chatManager.init(&console, world.getThisTeamIndex());
|
||||
chatManager.init(&console, -1);
|
||||
|
||||
publishToMasterserverThread = new SimpleTaskThread(this,0,100);
|
||||
publishToMasterserverThread->start();
|
||||
}
|
||||
|
||||
MenuStateCustomGame::~MenuStateCustomGame() {
|
||||
BaseThread::shutdownAndWait(publishToMasterserverThread);
|
||||
delete publishToMasterserverThread;
|
||||
publishToMasterserverThread = NULL;
|
||||
}
|
||||
|
||||
void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
||||
|
@ -223,6 +233,17 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
soundRenderer.playFx(coreData.getClickSoundA());
|
||||
|
||||
/*
|
||||
if( listBoxPublishServer.getEditable() &&
|
||||
listBoxPublishServer.getSelectedItemIndex() == 0) {
|
||||
needToRepublishToMasterserver = true;
|
||||
lastMasterserverPublishing = 0;
|
||||
publishToMasterserver();
|
||||
simpleTask();
|
||||
}
|
||||
*/
|
||||
|
||||
mainMenu->setState(new MenuStateNewGame(program, mainMenu));
|
||||
}
|
||||
else if(buttonPlayNow.mouseClick(x,y) && buttonPlayNow.getEnabled()) {
|
||||
|
@ -253,6 +274,14 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
bool bOkToStart = serverInterface->launchGame(&gameSettings);
|
||||
if(bOkToStart == true)
|
||||
{
|
||||
if( listBoxPublishServer.getEditable() &&
|
||||
listBoxPublishServer.getSelectedItemIndex() == 0) {
|
||||
|
||||
needToRepublishToMasterserver = true;
|
||||
lastMasterserverPublishing = 0;
|
||||
publishToMasterserver();
|
||||
simpleTask();
|
||||
}
|
||||
program->setState(new Game(program, &gameSettings));
|
||||
}
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
@ -264,38 +293,45 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
labelMapInfo.setText(mapInfo.desc);
|
||||
updateControlers();
|
||||
updateNetworkSlots();
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
lastSetChangedGameSettings = time(NULL);;
|
||||
lastSetChangedGameSettings = time(NULL);
|
||||
}
|
||||
}
|
||||
else if (listBoxFogOfWar.mouseClick(x, y)) {
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
lastSetChangedGameSettings = time(NULL);;
|
||||
}
|
||||
}
|
||||
else if(listBoxTileset.mouseClick(x, y)){
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
lastSetChangedGameSettings = time(NULL);;
|
||||
lastSetChangedGameSettings = time(NULL);
|
||||
}
|
||||
}
|
||||
else if(listBoxTileset.mouseClick(x, y)){
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
lastSetChangedGameSettings = time(NULL);
|
||||
}
|
||||
}
|
||||
else if(listBoxTechTree.mouseClick(x, y)){
|
||||
reloadFactions();
|
||||
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
lastSetChangedGameSettings = time(NULL);;
|
||||
lastSetChangedGameSettings = time(NULL);
|
||||
}
|
||||
}
|
||||
else if(listBoxPublishServer.mouseClick(x, y)&&listBoxPublishServer.getEditable()){
|
||||
needToRepublishToMasterserver = true;
|
||||
soundRenderer.playFx(coreData.getClickSoundC());
|
||||
}
|
||||
else
|
||||
|
@ -331,6 +367,7 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
}
|
||||
updateNetworkSlots();
|
||||
|
||||
needToRepublishToMasterserver = true;
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
|
@ -338,6 +375,7 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
}
|
||||
}
|
||||
else if(listBoxFactions[i].mouseClick(x, y)){
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
|
@ -347,6 +385,8 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
}
|
||||
else if(listBoxTeams[i].mouseClick(x, y))
|
||||
{
|
||||
needToRepublishToMasterserver = true;
|
||||
|
||||
if(hasNetworkGameSettings() == true)
|
||||
{
|
||||
needToSetChangedGameSettings = true;
|
||||
|
@ -607,14 +647,13 @@ void MenuStateCustomGame::update()
|
|||
listBoxPublishServer.setEditable(false);
|
||||
}
|
||||
|
||||
if(listBoxPublishServer.getEditable() && listBoxPublishServer.getSelectedItemIndex()==0 && (difftime(time(NULL),lastMasterserverPublishing) >= 15) ){
|
||||
if(listBoxPublishServer.getEditable() &&
|
||||
listBoxPublishServer.getSelectedItemIndex() == 0 &&
|
||||
needToRepublishToMasterserver == true) {
|
||||
// give it to me baby, aha aha ...
|
||||
lastMasterserverPublishing = time(NULL);
|
||||
publishToMasterserver();
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(difftime(time(NULL),lastSetChangedGameSettings) >= 2)
|
||||
{
|
||||
GameSettings gameSettings;
|
||||
|
@ -652,7 +691,7 @@ void MenuStateCustomGame::publishToMasterserver()
|
|||
loadGameSettings(&gameSettings);
|
||||
string serverinfo="";
|
||||
|
||||
for(int i= 0; i<mapInfo.players; ++i)
|
||||
for(int i= 0; i < mapInfo.players; ++i)
|
||||
{
|
||||
if(listBoxControls[i].getSelectedItemIndex() != ctClosed)
|
||||
{
|
||||
|
@ -675,38 +714,36 @@ void MenuStateCustomGame::publishToMasterserver()
|
|||
}
|
||||
}
|
||||
//?status=waiting&system=linux&info=titus
|
||||
serverinfo+="glestVersion="+escapeURL(glestVersionString)+"&";
|
||||
serverinfo+="platform="+escapeURL(getPlatformNameString())+"&";
|
||||
serverinfo+="binaryCompileDate="+escapeURL(getCompileDateTime())+"&";
|
||||
serverinfo += "glestVersion=" + SystemFlags::escapeURL(glestVersionString) + "&";
|
||||
serverinfo += "platform=" + SystemFlags::escapeURL(getPlatformNameString()) + "&";
|
||||
serverinfo += "binaryCompileDate=" + SystemFlags::escapeURL(getCompileDateTime()) + "&";
|
||||
|
||||
//game info:
|
||||
serverinfo+="serverTitle="+escapeURL(Config::getInstance().getString("NetPlayerName")+"'s game")+"&";
|
||||
serverinfo += "serverTitle=" + SystemFlags::escapeURL(Config::getInstance().getString("NetPlayerName") + "'s game") + "&";
|
||||
//ip is automatically set
|
||||
|
||||
//game setup info:
|
||||
serverinfo+="tech="+escapeURL(listBoxTechTree.getSelectedItem())+"&";
|
||||
serverinfo+="map="+escapeURL(listBoxMap.getSelectedItem())+"&";
|
||||
serverinfo+="tileset="+escapeURL(listBoxTileset.getSelectedItem())+"&";
|
||||
serverinfo+="activeSlots="+intToStr(slotCountUsed)+"&";
|
||||
serverinfo+="networkSlots="+intToStr(slotCountHumans)+"&";
|
||||
serverinfo+="connectedClients="+intToStr(slotCountConnectedPlayers);
|
||||
|
||||
string request = Config::getInstance().getString("Masterserver")+"addServerInfo.php?"+serverinfo;
|
||||
printf("the request is:\n%s\n",request.c_str());
|
||||
|
||||
|
||||
std::string serverInfo = SystemFlags::getHTTP(request);
|
||||
serverinfo += "tech=" + SystemFlags::escapeURL(listBoxTechTree.getSelectedItem()) + "&";
|
||||
serverinfo += "map=" + SystemFlags::escapeURL(listBoxMap.getSelectedItem()) + "&";
|
||||
serverinfo += "tileset=" + SystemFlags::escapeURL(listBoxTileset.getSelectedItem()) + "&";
|
||||
serverinfo += "activeSlots=" + intToStr(slotCountUsed) + "&";
|
||||
serverinfo += "networkSlots=" + intToStr(slotCountHumans) + "&";
|
||||
serverinfo += "connectedClients=" + intToStr(slotCountConnectedPlayers);
|
||||
|
||||
publishToServerInfo = serverinfo;
|
||||
}
|
||||
|
||||
string MenuStateCustomGame::escapeURL(string in)
|
||||
{
|
||||
char *escaped=curl_easy_escape(SystemFlags::curl_handle,in.c_str(),0);
|
||||
if(escaped==NULL)
|
||||
abort();
|
||||
string out=escaped;
|
||||
curl_free(escaped);
|
||||
return out;
|
||||
void MenuStateCustomGame::simpleTask() {
|
||||
if( needToRepublishToMasterserver == true &&
|
||||
difftime(time(NULL),lastMasterserverPublishing) >= 5) {
|
||||
|
||||
needToRepublishToMasterserver = false;
|
||||
lastMasterserverPublishing = time(NULL);
|
||||
string request = Config::getInstance().getString("Masterserver") + "addServerInfo.php?" + publishToServerInfo;
|
||||
printf("the request is:\n%s\n",request.c_str());
|
||||
|
||||
std::string serverInfo = SystemFlags::getHTTP(request);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include "main_menu.h"
|
||||
#include "chat_manager.h"
|
||||
#include "simple_threads.h"
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
|
@ -21,7 +22,7 @@ namespace Glest{ namespace Game{
|
|||
// class MenuStateCustomGame
|
||||
// ===============================
|
||||
|
||||
class MenuStateCustomGame: public MenuState{
|
||||
class MenuStateCustomGame : public MenuState, public SimpleTaskCallbackInterface {
|
||||
private:
|
||||
GraphicButton buttonReturn;
|
||||
GraphicButton buttonPlayNow;
|
||||
|
@ -54,12 +55,16 @@ private:
|
|||
bool needToSetChangedGameSettings;
|
||||
time_t lastSetChangedGameSettings;
|
||||
time_t lastMasterserverPublishing;
|
||||
bool needToRepublishToMasterserver;
|
||||
string publishToServerInfo;
|
||||
SimpleTaskThread *publishToMasterserverThread;
|
||||
|
||||
Console console;
|
||||
ChatManager chatManager;
|
||||
|
||||
public:
|
||||
MenuStateCustomGame(Program *program, MainMenu *mainMenu, bool openNetworkSlots= false);
|
||||
~MenuStateCustomGame();
|
||||
|
||||
void mouseClick(int x, int y, MouseButton mouseButton);
|
||||
void mouseMove(int x, int y, const MouseState *mouseState);
|
||||
|
@ -69,6 +74,8 @@ public:
|
|||
virtual void keyDown(char key);
|
||||
virtual void keyPress(char c);
|
||||
|
||||
virtual void simpleTask();
|
||||
|
||||
private:
|
||||
|
||||
bool hasNetworkGameSettings();
|
||||
|
@ -79,7 +86,6 @@ private:
|
|||
void closeUnusedSlots();
|
||||
void updateNetworkSlots();
|
||||
void publishToMasterserver();
|
||||
string escapeURL(string in);
|
||||
};
|
||||
|
||||
}}//end namespace
|
||||
|
|
|
@ -142,7 +142,11 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||
|
||||
NetworkManager::getInstance().end();
|
||||
NetworkManager::getInstance().init(nrClient);
|
||||
updateServerInfo();
|
||||
//updateServerInfo();
|
||||
|
||||
needUpdateFromServer = true;
|
||||
updateFromMasterserverThread = new SimpleTaskThread(this,0,100);
|
||||
updateFromMasterserverThread->start();
|
||||
}
|
||||
|
||||
MenuStateMasterserver::~MenuStateMasterserver() {
|
||||
|
@ -174,7 +178,8 @@ void MenuStateMasterserver::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
}
|
||||
else if(buttonRefresh.mouseClick(x, y)){
|
||||
soundRenderer.playFx(coreData.getClickSoundB());
|
||||
updateServerInfo();
|
||||
//updateServerInfo();
|
||||
needUpdateFromServer = true;
|
||||
}
|
||||
else if(buttonReturn.mouseClick(x, y)){
|
||||
soundRenderer.playFx(coreData.getClickSoundB());
|
||||
|
@ -222,7 +227,14 @@ void MenuStateMasterserver::render(){
|
|||
void MenuStateMasterserver::update(){
|
||||
}
|
||||
|
||||
void MenuStateMasterserver::simpleTask() {
|
||||
if(needUpdateFromServer == true) {
|
||||
updateServerInfo();
|
||||
}
|
||||
}
|
||||
|
||||
void MenuStateMasterserver::updateServerInfo() {
|
||||
needUpdateFromServer = false;
|
||||
//MasterServerInfos masterServerInfos;
|
||||
clearServerLines();
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include "main_menu.h"
|
||||
#include "masterserver_info.h"
|
||||
#include "simple_threads.h"
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
|
@ -63,7 +64,7 @@ public:
|
|||
typedef vector<ServerLine*> ServerLines;
|
||||
typedef vector<MasterServerInfo*> MasterServerInfos;
|
||||
|
||||
class MenuStateMasterserver: public MenuState{
|
||||
class MenuStateMasterserver : public MenuState, public SimpleTaskCallbackInterface {
|
||||
private:
|
||||
GraphicButton buttonRefresh;
|
||||
GraphicButton buttonReturn;
|
||||
|
@ -73,6 +74,8 @@ private:
|
|||
GraphicMessageBox mainMessageBox;
|
||||
int mainMessageBoxState;
|
||||
|
||||
bool needUpdateFromServer;
|
||||
SimpleTaskThread *updateFromMasterserverThread;
|
||||
|
||||
public:
|
||||
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
||||
|
@ -83,6 +86,8 @@ public:
|
|||
void update();
|
||||
void render();
|
||||
|
||||
virtual void simpleTask();
|
||||
|
||||
private:
|
||||
void showMessageBox(const string &text, const string &header, bool toggle);
|
||||
void connectToServer(string ipString);
|
||||
|
|
|
@ -348,11 +348,17 @@ void ConnectionSlot::update(bool checkForNewClients)
|
|||
}
|
||||
default:
|
||||
{
|
||||
if(gotIntro == true) {
|
||||
//throw runtime_error("Unexpected message in connection slot: " + intToStr(networkMessageType));
|
||||
string sErr = "Unexpected message in connection slot: " + intToStr(networkMessageType);
|
||||
//sendTextMessage(sErr,-1);
|
||||
DisplayErrorMessage(sErr);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] got invalid message type before intro, disconnecting socket.\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ public:
|
|||
static SystemFlagsType & getSystemSettingType(DebugType type) { return debugLogFileList[type]; }
|
||||
static size_t httpWriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data);
|
||||
static std::string getHTTP(std::string URL);
|
||||
static std::string escapeURL(std::string URL);
|
||||
|
||||
// Let the macro call into this when require.. NEVER call it automatically.
|
||||
static void handleDebug(DebugType type, const char *fmt, ...);
|
||||
|
|
|
@ -68,6 +68,18 @@ size_t SystemFlags::httpWriteMemoryCallback(void *ptr, size_t size, size_t nmemb
|
|||
return realsize;
|
||||
}
|
||||
|
||||
std::string SystemFlags::escapeURL(std::string URL)
|
||||
{
|
||||
string result = URL;
|
||||
|
||||
char *escaped=curl_easy_escape(SystemFlags::curl_handle,URL.c_str(),0);
|
||||
if(escaped != NULL) {
|
||||
result = escaped;
|
||||
curl_free(escaped);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string SystemFlags::getHTTP(std::string URL) {
|
||||
curl_easy_setopt(SystemFlags::curl_handle, CURLOPT_URL, URL.c_str());
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user