- added code for server to tell clients which port to use for FTP

This commit is contained in:
Mark Vejvoda 2011-01-15 18:56:03 +00:00
parent c6e809ec97
commit e6f69a3839
9 changed files with 38 additions and 19 deletions

View File

@ -1706,7 +1706,7 @@ void Renderer::renderSurface(const int renderFps) {
if(shadowsOffDueToMinRender == false) { if(shadowsOffDueToMinRender == false) {
//shadow texture //shadow texture
if(shadows==sProjected || shadows==sShadowMapping){ if(shadows == sProjected || shadows == sShadowMapping) {
glActiveTexture(shadowTexUnit); glActiveTexture(shadowTexUnit);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);

View File

@ -389,7 +389,8 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM
if(config.getBool("EnableFTPXfer","true") == true) { if(config.getBool("EnableFTPXfer","true") == true) {
ClientInterface *clientInterface = networkManager.getClientInterface(); ClientInterface *clientInterface = networkManager.getClientInterface();
string serverUrl = clientInterface->getServerIpAddress(); string serverUrl = clientInterface->getServerIpAddress();
int portNumber = config.getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str()); //int portNumber = config.getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str());
int portNumber = clientInterface->getServerFTPPort();
vector<string> mapPathList = config.getPathListForType(ptMaps); vector<string> mapPathList = config.getPathListForType(ptMaps);
std::pair<string,string> mapsPath; std::pair<string,string> mapsPath;

View File

@ -550,10 +550,21 @@ void MenuStateJoinGame::connectToServer() {
config.setString("ServerIp", serverIp.getString()); config.setString("ServerIp", serverIp.getString());
config.save(); config.save();
abortAutoFind = true; for(time_t elapsedWait = time(NULL);
clientInterface->stopServerDiscovery(); clientInterface->getIntroDone() == false &&
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu)); clientInterface->isConnected() &&
difftime(time(NULL),elapsedWait) <= 3;) {
if(clientInterface->isConnected()) {
//update lobby
clientInterface->updateLobby();
}
}
if( clientInterface->isConnected() == true &&
clientInterface->getIntroDone() == true) {
abortAutoFind = true;
clientInterface->stopServerDiscovery();
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu));
}
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] END\n",__FILE__,__FUNCTION__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] END\n",__FILE__,__FUNCTION__);
} }

View File

@ -170,8 +170,9 @@ void ClientInterface::updateLobby() {
versionString = networkMessageIntro.getVersionString(); versionString = networkMessageIntro.getVersionString();
playerIndex= networkMessageIntro.getPlayerIndex(); playerIndex= networkMessageIntro.getPlayerIndex();
serverName= networkMessageIntro.getName(); serverName= networkMessageIntro.getName();
serverFTPPort = networkMessageIntro.getFtpPort();
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] got NetworkMessageIntro, networkMessageIntro.getGameState() = %d, versionString [%s], sessionKey = %d, playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,networkMessageIntro.getGameState(),versionString.c_str(),sessionKey,playerIndex); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] got NetworkMessageIntro, networkMessageIntro.getGameState() = %d, versionString [%s], sessionKey = %d, playerIndex = %d, serverFTPPort = %d\n",__FILE__,__FUNCTION__,__LINE__,networkMessageIntro.getGameState(),versionString.c_str(),sessionKey,playerIndex,serverFTPPort);
//check consistency //check consistency
bool compatible = checkVersionComptability(networkMessageIntro.getVersionString(), getNetworkVersionString()); bool compatible = checkVersionComptability(networkMessageIntro.getVersionString(), getNetworkVersionString());
@ -223,7 +224,7 @@ void ClientInterface::updateLobby() {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
//send intro message //send intro message
NetworkMessageIntro sendNetworkMessageIntro(sessionKey,getNetworkVersionString(), getHumanPlayerName(), -1, nmgstOk, this->getSocket()->getConnectedIPAddress()); NetworkMessageIntro sendNetworkMessageIntro(sessionKey,getNetworkVersionString(), getHumanPlayerName(), -1, nmgstOk, this->getSocket()->getConnectedIPAddress(),serverFTPPort);
sendMessage(&sendNetworkMessageIntro); sendMessage(&sendNetworkMessageIntro);
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);

View File

@ -54,6 +54,7 @@ private:
time_t clientSimulationLagStartTime; time_t clientSimulationLagStartTime;
string versionString; string versionString;
int sessionKey; int sessionKey;
int serverFTPPort;
public: public:
ClientInterface(); ClientInterface();
@ -104,6 +105,7 @@ public:
const string &getVersionString() const {return versionString;} const string &getVersionString() const {return versionString;}
virtual string getHumanPlayerName(int index=-1); virtual string getHumanPlayerName(int index=-1);
virtual int getHumanPlayerIndex() const {return playerIndex;} virtual int getHumanPlayerIndex() const {return playerIndex;}
int getServerFTPPort() const { return serverFTPPort; }
protected: protected:

View File

@ -340,7 +340,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] !!!!!!!!WARNING - no open slots, disconnecting client\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] !!!!!!!!WARNING - no open slots, disconnecting client\n",__FILE__,__FUNCTION__,__LINE__);
if(socket != NULL) { if(socket != NULL) {
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstNoSlots, 0); NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstNoSlots, 0, ServerSocket::getFTPServerPort());
sendMessage(&networkMessageIntro); sendMessage(&networkMessageIntro);
} }
@ -350,7 +350,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] client will be assigned to the next open slot\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] client will be assigned to the next open slot\n",__FILE__,__FUNCTION__,__LINE__);
if(socket != NULL) { if(socket != NULL) {
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstOk, 0); NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstOk, 0, ServerSocket::getFTPServerPort());
sendMessage(&networkMessageIntro); sendMessage(&networkMessageIntro);
} }
} }

View File

@ -120,7 +120,8 @@ NetworkMessageIntro::NetworkMessageIntro() {
NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionString, NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionString,
const string &name, int playerIndex, const string &name, int playerIndex,
NetworkGameStateType gameState, NetworkGameStateType gameState,
uint32 externalIp) { uint32 externalIp,
uint32 ftpPort) {
data.messageType = nmtIntro; data.messageType = nmtIntro;
data.sessionId = sessionId; data.sessionId = sessionId;
data.versionString = versionString; data.versionString = versionString;
@ -128,9 +129,10 @@ NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionSt
data.playerIndex = static_cast<int16>(playerIndex); data.playerIndex = static_cast<int16>(playerIndex);
data.gameState = static_cast<int8>(gameState); data.gameState = static_cast<int8>(gameState);
data.externalIp = externalIp; data.externalIp = externalIp;
data.ftpPort = ftpPort;
} }
bool NetworkMessageIntro::receive(Socket* socket){ bool NetworkMessageIntro::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data)); bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.name.nullTerminate(); data.name.nullTerminate();
data.versionString.nullTerminate(); data.versionString.nullTerminate();
@ -138,9 +140,9 @@ bool NetworkMessageIntro::receive(Socket* socket){
return result; return result;
} }
void NetworkMessageIntro::send(Socket* socket) const{ void NetworkMessageIntro::send(Socket* socket) const {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] sending nmtIntro, data.playerIndex = %d, data.sessionId = %d\n",__FILE__,__FUNCTION__,__LINE__,data.playerIndex,data.sessionId); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] sending nmtIntro, data.playerIndex = %d, data.sessionId = %d\n",__FILE__,__FUNCTION__,__LINE__,data.playerIndex,data.sessionId);
assert(data.messageType==nmtIntro); assert(data.messageType == nmtIntro);
NetworkMessage::send(socket, &data, sizeof(data)); NetworkMessage::send(socket, &data, sizeof(data));
} }

View File

@ -92,6 +92,7 @@ private:
int16 playerIndex; int16 playerIndex;
int8 gameState; int8 gameState;
uint32 externalIp; uint32 externalIp;
uint32 ftpPort;
}; };
private: private:
@ -99,7 +100,7 @@ private:
public: public:
NetworkMessageIntro(); NetworkMessageIntro();
NetworkMessageIntro(int32 sessionId, const string &versionString, const string &name, int playerIndex, NetworkGameStateType gameState, uint32 externalIp); NetworkMessageIntro(int32 sessionId, const string &versionString, const string &name, int playerIndex, NetworkGameStateType gameState, uint32 externalIp, uint32 ftpPort);
int32 getSessionId() const { return data.sessionId;} int32 getSessionId() const { return data.sessionId;}
string getVersionString() const { return data.versionString.getString(); } string getVersionString() const { return data.versionString.getString(); }
@ -107,6 +108,7 @@ public:
int getPlayerIndex() const { return data.playerIndex; } int getPlayerIndex() const { return data.playerIndex; }
NetworkGameStateType getGameState() const { return static_cast<NetworkGameStateType>(data.gameState); } NetworkGameStateType getGameState() const { return static_cast<NetworkGameStateType>(data.gameState); }
uint32 getExternalIp() const { return data.externalIp;} uint32 getExternalIp() const { return data.externalIp;}
uint32 getFtpPort() const { return data.ftpPort; }
virtual bool receive(Socket* socket); virtual bool receive(Socket* socket);
virtual void send(Socket* socket) const; virtual void send(Socket* socket) const;

View File

@ -262,8 +262,8 @@ FTP_Client_ResultType FTPClientThread::getMapFromServer(string mapFileName, stri
CURLcode res = curl_easy_perform(curl); CURLcode res = curl_easy_perform(curl);
if(CURLE_OK != res) { if(CURLE_OK != res) {
// we failed // we failed
printf("curl FAILED with: %d [%s]\n", res,curl_easy_strerror(res)); printf("curl FAILED with: %d [%s] szBuf [%s]\n", res,curl_easy_strerror(res),szBuf);
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"curl FAILED with: %d [%s]\n", res,curl_easy_strerror(res)); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"curl FAILED with: %d [%s] szBuf [%s]\n", res,curl_easy_strerror(res),szBuf);
} }
else { else {
result = ftp_crt_SUCCESS; result = ftp_crt_SUCCESS;
@ -420,8 +420,8 @@ FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
if(CURLE_OK != res) { if(CURLE_OK != res) {
// we failed // we failed
printf("curl FAILED with: %d [%s] attempting to remove folder contents [%s]\n", res,curl_easy_strerror(res),destRootFolder.c_str()); printf("curl FAILED with: %d [%s] attempting to remove folder contents [%s] szBuf [%s]\n", res,curl_easy_strerror(res),destRootFolder.c_str(),szBuf);
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"curl FAILED with: %d [%s] attempting to remove folder contents [%s]\n", res,curl_easy_strerror(res),destRootFolder.c_str()); SystemFlags::OutputDebug(SystemFlags::debugNetwork,"curl FAILED with: %d [%s] attempting to remove folder contents [%s] szBuf [%s]\n", res,curl_easy_strerror(res),destRootFolder.c_str(),szBuf);
if(destRootFolder != "") { if(destRootFolder != "") {
//unlink(destRootFolder.c_str()); //unlink(destRootFolder.c_str());