- 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) {
//shadow texture
if(shadows==sProjected || shadows==sShadowMapping){
if(shadows == sProjected || shadows == sShadowMapping) {
glActiveTexture(shadowTexUnit);
glEnable(GL_TEXTURE_2D);

View File

@ -389,7 +389,8 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM
if(config.getBool("EnableFTPXfer","true") == true) {
ClientInterface *clientInterface = networkManager.getClientInterface();
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);
std::pair<string,string> mapsPath;

View File

@ -550,10 +550,21 @@ void MenuStateJoinGame::connectToServer() {
config.setString("ServerIp", serverIp.getString());
config.save();
abortAutoFind = true;
clientInterface->stopServerDiscovery();
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu));
for(time_t elapsedWait = time(NULL);
clientInterface->getIntroDone() == false &&
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__);
}

View File

@ -170,8 +170,9 @@ void ClientInterface::updateLobby() {
versionString = networkMessageIntro.getVersionString();
playerIndex= networkMessageIntro.getPlayerIndex();
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
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__);
//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);
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);

View File

@ -54,6 +54,7 @@ private:
time_t clientSimulationLagStartTime;
string versionString;
int sessionKey;
int serverFTPPort;
public:
ClientInterface();
@ -104,6 +105,7 @@ public:
const string &getVersionString() const {return versionString;}
virtual string getHumanPlayerName(int index=-1);
virtual int getHumanPlayerIndex() const {return playerIndex;}
int getServerFTPPort() const { return serverFTPPort; }
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__);
if(socket != NULL) {
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstNoSlots, 0);
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstNoSlots, 0, ServerSocket::getFTPServerPort());
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__);
if(socket != NULL) {
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstOk, 0);
NetworkMessageIntro networkMessageIntro(sessionKey,getNetworkVersionString(), getHostName(), playerIndex, nmgstOk, 0, ServerSocket::getFTPServerPort());
sendMessage(&networkMessageIntro);
}
}

View File

@ -120,7 +120,8 @@ NetworkMessageIntro::NetworkMessageIntro() {
NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionString,
const string &name, int playerIndex,
NetworkGameStateType gameState,
uint32 externalIp) {
uint32 externalIp,
uint32 ftpPort) {
data.messageType = nmtIntro;
data.sessionId = sessionId;
data.versionString = versionString;
@ -128,9 +129,10 @@ NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionSt
data.playerIndex = static_cast<int16>(playerIndex);
data.gameState = static_cast<int8>(gameState);
data.externalIp = externalIp;
data.ftpPort = ftpPort;
}
bool NetworkMessageIntro::receive(Socket* socket){
bool NetworkMessageIntro::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.name.nullTerminate();
data.versionString.nullTerminate();
@ -138,9 +140,9 @@ bool NetworkMessageIntro::receive(Socket* socket){
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);
assert(data.messageType==nmtIntro);
assert(data.messageType == nmtIntro);
NetworkMessage::send(socket, &data, sizeof(data));
}

View File

@ -92,6 +92,7 @@ private:
int16 playerIndex;
int8 gameState;
uint32 externalIp;
uint32 ftpPort;
};
private:
@ -99,7 +100,7 @@ private:
public:
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;}
string getVersionString() const { return data.versionString.getString(); }
@ -107,6 +108,7 @@ public:
int getPlayerIndex() const { return data.playerIndex; }
NetworkGameStateType getGameState() const { return static_cast<NetworkGameStateType>(data.gameState); }
uint32 getExternalIp() const { return data.externalIp;}
uint32 getFtpPort() const { return data.ftpPort; }
virtual bool receive(Socket* socket);
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);
if(CURLE_OK != res) {
// we failed
printf("curl FAILED with: %d [%s]\n", res,curl_easy_strerror(res));
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"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] szBuf [%s]\n", res,curl_easy_strerror(res),szBuf);
}
else {
result = ftp_crt_SUCCESS;
@ -420,8 +420,8 @@ FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
if(CURLE_OK != res) {
// we failed
printf("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]\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] szBuf [%s]\n", res,curl_easy_strerror(res),destRootFolder.c_str(),szBuf);
if(destRootFolder != "") {
//unlink(destRootFolder.c_str());