/client/NetEngine.cpp
C++ | 876 lines | 858 code | 6 blank | 12 comment | 275 complexity | 7b9091c331d991bc76f799cf4e4435c3 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause
- /*
- This file is a part of World Apocalypse.
- Copyright (C) 2011 Le Sommer Leo Robin
- World Apocalypse is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- World Apocalypse is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- #include "NetEngine.h"
- #include "GameEngine.h"
- #include <time.h>
- #include <sstream>
- #include "sleep.h"
- #include "ConfigGlobalObject.h"
- namespace network
- {
- void* TreceiveRequestsFromServer(void* data);
- NetEngine::NetEngine()
- {
- m_isInitiated = false;
- requestBuffer = new char[500];
- }
- NetEngine::~NetEngine()
- {
- delete[] requestBuffer;
- }
- void NetEngine::init(game::GameEngine* gameEngine, gui::GUIEngine* guiEngine)
- {
- m_fileReceivedMutex = PTHREAD_MUTEX_INITIALIZER;
- m_isThreadReceiveRequestsFromServerEnabled = false;
- m_gameEngine = gameEngine;
- m_guiEngine = guiEngine;
- m_isNetEngineStoped = false;
- m_isInitiated = true;
- }
- void NetEngine::remove()
- {
- if(!m_isInitiated)
- return;
- clean();
- }
- bool NetEngine::init(std::string name, std::string mdp, const char* ip, int port, int domain, int protocol)
- {
- //connection a l'appli serveur
- #if defined (WIN32)
- WSADATA WSAData;
- int error = WSAStartup(MAKEWORD(2,2), &WSAData);
- #else
- int error = 0;
- #endif
- if(error)
- {
- std::cout<<"erreur : les sockets de windows ne semblent pas fonctionnelles"<<std::endl;
- return false;
- }
- m_sock = socket(domain, protocol, 0);
- if(m_sock == INVALID_SOCKET)
- {
- std::cout<<"erreur : erreur lors de la creation de la socket"<<std::endl;
- return false;
- }
- std::cout<<"La socket "<<m_sock<<" est desormais ouverte sur le port "<<port<<std::endl;
- m_sin.sin_addr.s_addr = inet_addr(ip);
- m_sin.sin_family = domain;
- m_sin.sin_port = htons(port);
- int sockError = connect(m_sock, (SOCKADDR*)&m_sin, sizeof(m_sin));
- if(sockError == SOCKET_ERROR)
- {
- std::cout<<"erreur : la connection a échoué"<<std::endl;
- return false;
- }
- std::cout<<"Connection a "<<inet_ntoa(m_sin.sin_addr)<<" sur le port "<<htons(m_sin.sin_port)<<" etabli"<<std::endl;
- std::cout<<"Envoie de la requete de connexion ... ";
- std::stringstream os;
- os<<name<<':'<<mdp<<'\n';
- if(send(m_sock, static_cast<const CAST_FOR_SOCKETS_FUNCTIONS>(os.str().c_str()), os.str().size(), 0) != SOCKET_ERROR)
- {
- std::cout<<"done"<<std::endl;
- int nBit;
- if((nBit = recv(m_sock, static_cast<CAST_FOR_SOCKETS_FUNCTIONS>(requestBuffer), 500, 0)) != SOCKET_ERROR)
- {
- separateReceivedRequests(requestBuffer, nBit);
- if(getRequest() == std::string("ok"))
- {
- std::cout<<"la connection a été établie"<<std::endl;
- createThread();
- return true;
- }
- else
- {
- std::cout<<"erreur : la connexion a été refusé"<<std::endl;
- return false;
- }
- }
- else
- {
- std::cout<<"erreur : la requete n'a pas été envoyé"<<std::endl;
- return false;
- }
- }
- else
- {
- std::cout<<std::endl<<"erreur : erreur lors de l'envoi de l'ID"<<std::endl;
- return false;
- }
- return false;
- }
- void NetEngine::createThread()
- {
- //création des thread
- pthread_create(&threadReceiveRequestsFromServer, NULL, TreceiveRequestsFromServer, static_cast<void*>(this));
- m_isThreadReceiveRequestsFromServerEnabled = true;
- }
- void NetEngine::clean()
- {
- if(!m_isThreadReceiveRequestsFromServerEnabled)
- return;
- std::cout<<"arret des thread ...";
- m_isNetEngineStoped = true;
- if(m_isThreadReceiveRequestsFromServerEnabled)
- pthread_cancel(threadReceiveRequestsFromServer);
- m_isThreadReceiveRequestsFromServerEnabled = false;
- std::cout<<" done"<<std::endl<<"envoi de la demande de deconnection au serveur ...";
- std::ostringstream os;
- os<<'q'<<m_id<<'\n';
- send(m_sock, static_cast<const CAST_FOR_SOCKETS_FUNCTIONS>(os.str().c_str()), os.str().size(), 0);
- std::cout<<" done"<<std::endl;
- std::cout<<"Fermeture de la socket ...";
- closesocket(m_sock);
- #if defined (WIN32)
- WSACleanup();
- #endif
- std::cout<<" done"<<std::endl;
- }
- void NetEngine::sendRequestToServer()
- {
- while(!m_fileRequest.empty())
- {
- std::string willBeSend = m_fileRequest.front() + '\n';
- send(m_sock, static_cast<const CAST_FOR_SOCKETS_FUNCTIONS>(willBeSend.c_str()), willBeSend.size(), 0);
- m_fileRequest.pop();
- }
- }
- void NetEngine::executeRequestsFromServer()
- {
- std::string received;
- while((received = getRequest()) != "")
- {
- if(received[0] == 'p')
- {
- int id;
- float posX, posY, posZ, rotY;
- sscanf(received.c_str(), "p%d/%f/%f/%f/%f", &id, &posX, &posY, &posZ, &rotY);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setPositionAndRotationY(Ogre::Vector3(posX, posY, posZ), rotY);
- else
- m_gameEngine->addPersonnageAttaquableFromIdAndPos(id, posX, posY, posZ, rotY);
- }
- else if(received[0] == 'o')
- {
- int id;
- float rotY;
- sscanf(received.c_str(), "o%d/%f", &id, &rotY);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setRotationY(rotY);
- }
- else if(received[0] == 'b')
- {
- int id;
- float vel;
- sscanf(received.c_str(), "b%d/%f", &id, &vel);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setOrientatedVelocity(vel);
- }
- else if(received[0] == 't')
- {
- float time = 0.0;
- sscanf(received.c_str(), "t%f", &time);
- m_gameEngine->getSceneEngine()->setTime(time);
- }
- else if(received[0] == 's')
- {
- int id;
- int nbr1;
- sscanf(received.c_str(), "s%d/%d", &id, &nbr1);
- game::StateType state = (game::StateType)nbr1;
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- (static_cast<game::PersonnageJoueur*>(perso))->setState(state);
- }
- else if(received[0] == 'i')
- {
- if(received[1] == 'k')
- {
- std::string idString;
- std::string name;
- unsigned int i = 2;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '\0')
- break;
- name += received[i];
- }
- unsigned int id = std::stoul(idString);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setName(name);
- }
- else if(received[1] == 'h')
- {
- int id;
- int hp;
- sscanf(received.c_str(), "ih%d/%d", &id, &hp);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setHP(hp);
- }
- else if(received[1] == 'f')
- {
- int id = 0, race = 0, sex = 0, haircut = 0, hairColor = 0, clothColor = 0, skinColor = 0;
- float noseSize = 0.0, noseWidth = 0.0, eyesHeight = 0.0, eyesWidth = 0.0, bodySize = 0.0, legsSize = 0.0, hipsSize = 0.0;
- sscanf(received.c_str(), "if%d/%d/%d/%d/%d/%d/%d/%f/%f/%f/%f/%f/%f/%f", &id, &race, &sex, &haircut, &hairColor, &clothColor, &skinColor, &noseSize, &noseWidth, &eyesHeight, &eyesWidth, &bodySize, &legsSize, &hipsSize);
- game::PersonnageJoueur* perso = static_cast<game::PersonnageJoueur*>(m_gameEngine->getPersonnageAttaquableFromId(id));
- if(perso != NULL)
- {
- std::cout<<race<<std::endl;
- perso->getCharacter()->setRace(GLOBAL_ConfigEngine->getRace(race));
- perso->getCharacter()->setSex(static_cast<scene::Character::Sex>(sex));
- perso->getCharacter()->setHaircut(haircut);
- perso->getCharacter()->setHairColor(hairColor);
- perso->getCharacter()->setClothColor(clothColor);
- perso->getCharacter()->setSkin(skinColor);
- perso->getCharacter()->setNoseSize(noseSize);
- perso->getCharacter()->setNoseWidth(noseWidth);
- perso->getCharacter()->setEyesHeight(eyesHeight);
- perso->getCharacter()->setEyesWidth(eyesWidth);
- perso->getCharacter()->setBodySize(bodySize);
- perso->getCharacter()->setLegsSize(legsSize);
- perso->getCharacter()->setHipsSize(hipsSize);
- }
- }
- else if(received[1] == 'd')
- {
- int receiver;
- int sender;
- sscanf(received.c_str(), "id%d/%d", &receiver, &sender);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(receiver);
- if(perso != NULL)
- {
- game::PersonnageAttaquable* perso2 = m_gameEngine->getPersonnageAttaquableFromId(sender);
- if(perso2 != NULL)
- {
- perso->isAttacked(perso2);
- }
- }
- }
- else if(received[1] == 'm')
- {
- int id;
- int mp;
- sscanf(received.c_str(), "im%d/%d", &id, &mp);
- if(id > 0)
- {
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- static_cast<game::PersonnageJoueur*>(perso)->setMP(mp);
- }
- }
- else if(received[1] == 'g')
- {
- int id;
- int hp;
- sscanf(received.c_str(), "ig%d/%d", &id, &hp);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- perso->setHPMax(hp);
- }
- else if(received[1] == 'l')
- {
- int id;
- int mp;
- sscanf(received.c_str(), "il%d/%d", &id, &mp);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(id > 0)
- {
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- static_cast<game::PersonnageJoueur*>(perso)->setMPMax(mp);
- }
- }
- else if(received[1] == 'x')
- {
- int xp;
- sscanf(received.c_str(), "ix%d", &xp);
- m_gameEngine->setXp(xp);
- }
- else if(received[1] == 'y')
- {
- int money;
- sscanf(received.c_str(), "iy%d", &money);
- m_gameEngine->setMoney(money);
- m_guiEngine->refreshInventaire();
- }
- else if(received[1] == 'z')
- {
- int lv;
- sscanf(received.c_str(), "iz%d", &lv);
- m_gameEngine->setLevel(lv);
- }
- else if(received[1] == 'e')
- {
- std::string idString;
- std::string typeString;
- std::string mesh;
- unsigned int i = 2;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- typeString += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '\0')
- break;
- mesh += received[i];
- }
- unsigned int id = std::stoul(idString);
- unsigned int type = std::stoul(typeString);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(id);
- if(perso != NULL)
- (static_cast<game::PersonnageJoueur*>(perso))->equiper(mesh, (game::TypeEquipment)type);
- }
- else if(received[1] == 'i')
- {
- std::string idString;
- std::string name;
- std::string description;
- std::string mesh;
- unsigned int i = 2;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- unsigned int id = std::stoul(idString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- name += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- description += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '\0')
- break;
- mesh += received[i];
- }
- m_gameEngine->addItem(game::Item(id, name, description, mesh));
- }
- else if(received[1] == 'n')
- {
- std::string idString;
- std::string name;
- std::string mesh;
- std::string posXString;
- std::string posYString;
- std::string posZString;
- std::string rotYString;
- unsigned int i = 2;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- unsigned int id = std::stoul(idString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- name += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- mesh += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- posXString += received[i];
- }
- double posX = atof(posXString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- posYString += received[i];
- }
- double posY = atof(posYString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- posZString += received[i];
- }
- double posZ = atof(posZString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- rotYString += received[i];
- }
- double rotY = atof(rotYString.c_str());
- m_gameEngine->addPersonnageNonJoueur(id, name, mesh, posX, posY, posZ, rotY);
- }
- else if(received[1] == 's')
- {
- std::string idString;
- std::string name;
- std::string description;
- unsigned int i = 3;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- unsigned int id = std::stoul(idString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- name += received[i];
- }
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- description += received[i];
- }
- m_gameEngine->addSkill(game::Skill(id, name, description));
- }
- else if(received[1] == 'r')
- {
- if(received[2] == 'i')
- {
- int id;
- int item;
- sscanf(received.c_str(), "iri%d/%d", &id, &item);
- if(m_id == id)
- {
- m_gameEngine->removeItem(item);
- m_guiEngine->refreshInventaire();
- }
- }
- }
- }
- else if(received[0] == 'v')
- {
- if(received[1] == 't')
- {
- std::string text = &received[2];
- m_guiEngine->getTextDialog()->init("", text);
- m_guiEngine->getTextDialog()->setCloseEvent(MyGUI::newDelegate(this, &NetEngine::textDialogButtonSuivantPressed));
- }
- else if(received[1] == 'c')
- {
- unsigned int i = 2;
- std::string choice1;
- while(received[i] != '|')
- {
- choice1 += received[i];
- i++;
- }
- i++;
- std::string choice2;
- while(received[i] != '|')
- {
- choice2 += received[i];
- i++;
- }
- i++;
- std::string text;
- while(received[i] != '\0')
- {
- text += received[i];
- i++;
- }
- m_guiEngine->getChoiceDialog()->init("", text, choice1, choice2);
- m_guiEngine->getChoiceDialog()->setFirstChoiceEvent(MyGUI::newDelegate(this, &NetEngine::buttonChoice1Pressed));
- m_guiEngine->getChoiceDialog()->setSecondChoiceEvent(MyGUI::newDelegate(this, &NetEngine::buttonChoice2Pressed));
- }
- else if(received[1] == 'i')
- {
- std::string idString;
- std::string priceString;
- std::string name;
- unsigned int i = 2;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- unsigned int id = std::stoul(idString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- priceString += received[i];
- }
- unsigned int price = std::stoul(priceString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '\0')
- break;
- name += received[i];
- }
- m_guiEngine->getMagasin()->addArticle(id, name, price);
- }
- else if(received[1] == 's')
- {
- m_guiEngine->getMagasin()->init();
- m_guiEngine->getMagasin()->setCloseEvent(MyGUI::newDelegate(this, &NetEngine::magasinButtonCloseEventPressed));
- }
- }
- else if(received[0] == 'x')
- {
- if(received[1] == 's')
- {
- m_gameEngine->setIfHaveGroup(true);
- }
- else if(received[1] == 'c')
- {
- m_gameEngine->setIfHaveGroup(false);
- }
- else if(received[1] == 'm')
- {
- int id = 0;
- sscanf(received.c_str(), "xm%d", &id);
- m_gameEngine->addGroupMember(id);
- }
- else if(received[1] == 'y')
- {
- int id = 0;
- sscanf(received.c_str(), "xy%d", &id);
- m_gameEngine->removeGroupMember(id);
- }
- else if(received[1] == 'o')
- {
- int algo = 0;
- sscanf(received.c_str(), "xo%d", &algo);
- m_gameEngine->setGroupDivisorAlgo(static_cast<game::DivisorAlgo>(algo));
- }
- else if(received[1] == 'f')
- {
- int id = 0;
- sscanf(received.c_str(), "xf%d", &id);
- m_gameEngine->setGroupAdmin(id);
- }
- else if(received[1] == 'd')
- {
- m_guiEngine->getChoiceDialog()->init("", "X vous invite dans son groupe.", "Accepter", "Refuser");
- m_guiEngine->getChoiceDialog()->setFirstChoiceEvent(MyGUI::newDelegate(this, &NetEngine::acceptGroupInvitation));
- m_guiEngine->getChoiceDialog()->setSecondChoiceEvent(MyGUI::newDelegate(this, &NetEngine::rejectGroupInvitation));
- }
- }
- else if(received[0] == 'e')
- {
- if(received[1] == 'x')
- {
- m_guiEngine->getTextDialog()->init("", "Vous ne pouvez pas quitter votre groupe si vous êtes admin, vous pouvez soit dissoudre le groupe soit léguer vos privilèges a un autre membre du groupe.");
- }
- }
- else if(received[0] == 'm')
- {
- m_guiEngine->addMessageToChatBox(received.substr(1, received.size() - 1));
- }
- else if(received[0] == 'd')
- {
- int receiver;
- int sender;
- int dammages;
- sscanf(received.c_str(), "d%d/%d/%d", &receiver, &sender, &dammages);
- game::PersonnageAttaquable* perso = m_gameEngine->getPersonnageAttaquableFromId(receiver);
- if(perso != NULL)
- perso->setHP(perso->m_hp - dammages);
- }
- else if(received[0] == 'z')
- {
- std::string zone = &received[1];
- m_gameEngine->changeZone(zone);
- }
- else if(received[0] == 'k')
- {
- int id;
- float posX, posY, posZ;
- sscanf(received.c_str(), "k%d/%f/%f/%f", &id, &posX, &posY, &posZ);
- scene::Particle* particle = m_gameEngine->getParticle(id);
- if(particle != 0)
- particle->setPosition(Ogre::Vector3(posX, posY, posZ));
- }
- else if(received[0] == 'h')
- {
- std::string idString;
- std::string scaleXString;
- std::string scaleYString;
- std::string scaleZString;
- std::string particle;
- unsigned int i = 1;
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- idString += received[i];
- }
- unsigned int id = std::stoul(idString);
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- scaleXString += received[i];
- }
- double scaleX = atof(scaleXString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- scaleYString += received[i];
- }
- double scaleY = atof(scaleYString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '/')
- {
- i++;
- break;
- }
- scaleZString += received[i];
- }
- double scaleZ = atof(scaleZString.c_str());
- for(; i < received.size(); i++)
- {
- if(received[i] == '\0')
- break;
- particle += received[i];
- }
- m_gameEngine->addParticle(id, particle, Ogre::Vector3(scaleX, scaleY, scaleX));
- }
- else if(received[0] == 'j')
- {
- int id;
- sscanf(received.c_str(), "j%d", &id);
- m_gameEngine->removeParticle(id);
- }
- else if(received[0] == 'c')
- {
- m_gameEngine->setIfHaveToSignaleCursorPosition(true);
- }
- else if(received[0] == 'd')
- {
- m_gameEngine->setIfHaveToSignaleCursorPosition(false);
- }
- else if(received[0] == 'f')
- {
- float scaleX = 0.0, scaleY = 0.0, scaleZ = 0.0;
- sscanf(received.c_str(), "f%f/%f/%f", &scaleX, &scaleY, &scaleZ);
- m_gameEngine->show3DCursor(Ogre::Vector3(scaleX, scaleY, scaleZ));
- }
- else if(received[0] == 'g')
- {
- m_gameEngine->hide3DCursor();
- }
- else if(received[0] == 'q')
- {
- int id;
- sscanf(received.c_str(), "q%d", &id);
- m_gameEngine->removePersonnageAttaquableFromId(id);
- }
- }
- }
- void NetEngine::receiveRequestsFromServer()
- {
- int nBit = recv(m_sock, static_cast<CAST_FOR_SOCKETS_FUNCTIONS>(requestBuffer), 500, 0);
- separateReceivedRequests(requestBuffer, nBit);
- }
- void NetEngine::separateReceivedRequests(char* requestBuffer, int size)
- {
- for(unsigned int i = 0; i < size; i++)
- {
- if(requestBuffer[i] == '\n')
- {
- pthread_mutex_lock(&m_fileReceivedMutex);
- m_fileReceived.push(m_currentReceived);
- pthread_mutex_unlock(&m_fileReceivedMutex);
- m_currentReceived = "";
- }
- else
- {
- m_currentReceived += requestBuffer[i];
- }
- }
- }
- std::string NetEngine::getRequest()
- {
- pthread_mutex_lock(&m_fileReceivedMutex);
- if(!m_fileReceived.empty())
- {
- std::string request = m_fileReceived.front();
- m_fileReceived.pop();
- pthread_mutex_unlock(&m_fileReceivedMutex);
- return request;
- }
- pthread_mutex_unlock(&m_fileReceivedMutex);
- return std::string("");
- }
- bool NetEngine::receiveAndExecuteRequestsFromServer()
- {
- receiveRequestsFromServer();
- return m_isNetEngineStoped;
- }
- void NetEngine::addRequestToFile(std::string request)
- {
- m_fileRequest.push(request);
- sendRequestToServer();
- }
- int NetEngine::getId()
- {
- return m_id;
- }
- void NetEngine::setId(unsigned char id)
- {
- m_id = id;
- }
- SOCKET NetEngine::getSocket()
- {
- return m_sock;
- }
- void NetEngine::textDialogButtonSuivantPressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- m_guiEngine->getTextDialog()->clean();
- std::string request("vn");
- addRequestToFile(request);
- }
- void NetEngine::buttonChoice1Pressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- m_guiEngine->getChoiceDialog()->clean();
- std::string request("vr0");
- addRequestToFile(request);
- }
- void NetEngine::buttonChoice2Pressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- m_guiEngine->getChoiceDialog()->clean();
- std::string request("vr1");
- addRequestToFile(request);
- }
- void NetEngine::magasinButtonCloseEventPressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- m_guiEngine->getMagasin()->clean();
- std::string request("vn");
- addRequestToFile(request);
- }
- void NetEngine::acceptGroupInvitation(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- addRequestToFile("xb");
- }
- void NetEngine::rejectGroupInvitation(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
- {
- addRequestToFile("xr");
- }
- void* TreceiveRequestsFromServer(void* data)
- {
- while(!(static_cast<NetEngine*>(data))->receiveAndExecuteRequestsFromServer())
- {
- sleep(1.0 / GLOBAL_ConfigEngine->m_FPS);
- }
- return NULL;
- }
- }