admin can now kick player joining in progress game while he is in the lobby
This commit is contained in:
parent
2c1b181bc7
commit
f79dd4be83
|
@ -1572,10 +1572,29 @@ void Game::setupPopupMenus(bool checkClientAdminOverrideOnly) {
|
||||||
NetworkManager &networkManager= NetworkManager::getInstance();
|
NetworkManager &networkManager= NetworkManager::getInstance();
|
||||||
NetworkRole role = networkManager.getNetworkRole();
|
NetworkRole role = networkManager.getNetworkRole();
|
||||||
ClientInterface *clientInterface = NULL;
|
ClientInterface *clientInterface = NULL;
|
||||||
|
ServerInterface *serverInterface = NULL;
|
||||||
|
|
||||||
bool allowAdminMenuItems = false;
|
bool allowAdminMenuItems = false;
|
||||||
|
bool forceJoinInProgressUpdate = false;
|
||||||
if(role == nrServer) {
|
if(role == nrServer) {
|
||||||
allowAdminMenuItems = true;
|
allowAdminMenuItems = true;
|
||||||
|
|
||||||
|
if(disconnectPlayerPopupMenuIndex == -1) {
|
||||||
|
serverInterface = dynamic_cast<ServerInterface *>(networkManager.getServerInterface());
|
||||||
|
if(serverInterface != NULL && checkClientAdminOverrideOnly == true) {
|
||||||
|
for(int i = 0; i < world.getFactionCount(); ++i) {
|
||||||
|
Faction *faction = world.getFaction(i);
|
||||||
|
ConnectionSlot *slot = serverInterface->getSlot(faction->getStartLocationIndex());
|
||||||
|
if(slot != NULL && slot->getConnectHasHandshaked() == true &&
|
||||||
|
slot->getCurrentFrameCount() <= 0) {
|
||||||
|
//printf("Connected slot can be disconnected: %d\n",slot->getPlayerIndex());
|
||||||
|
|
||||||
|
forceJoinInProgressUpdate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(role == nrClient) {
|
else if(role == nrClient) {
|
||||||
clientInterface = dynamic_cast<ClientInterface *>(networkManager.getClientInterface());
|
clientInterface = dynamic_cast<ClientInterface *>(networkManager.getClientInterface());
|
||||||
|
@ -1588,6 +1607,7 @@ void Game::setupPopupMenus(bool checkClientAdminOverrideOnly) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(checkClientAdminOverrideOnly == false ||
|
if(checkClientAdminOverrideOnly == false ||
|
||||||
|
forceJoinInProgressUpdate == true ||
|
||||||
(clientInterface != NULL &&
|
(clientInterface != NULL &&
|
||||||
(gameSettings.getMasterserver_admin() != clientInterface->getSessionKey() &&
|
(gameSettings.getMasterserver_admin() != clientInterface->getSessionKey() &&
|
||||||
clientInterface->isMasterServerAdminOverride() == true))) {
|
clientInterface->isMasterServerAdminOverride() == true))) {
|
||||||
|
@ -1599,7 +1619,7 @@ void Game::setupPopupMenus(bool checkClientAdminOverrideOnly) {
|
||||||
keyboardSetupPopupMenuIndex = -1;
|
keyboardSetupPopupMenuIndex = -1;
|
||||||
disconnectPlayerPopupMenuIndex = -1;
|
disconnectPlayerPopupMenuIndex = -1;
|
||||||
|
|
||||||
if(checkClientAdminOverrideOnly == true) {
|
if(checkClientAdminOverrideOnly == true && clientInterface != NULL) {
|
||||||
gameSettings.setMasterserver_admin(clientInterface->getSessionKey());
|
gameSettings.setMasterserver_admin(clientInterface->getSessionKey());
|
||||||
gameSettings.setMasterserver_admin_faction_index(clientInterface->getPlayerIndex());
|
gameSettings.setMasterserver_admin_faction_index(clientInterface->getPlayerIndex());
|
||||||
}
|
}
|
||||||
|
@ -3531,6 +3551,13 @@ void Game::mouseDownLeft(int x, int y) {
|
||||||
}
|
}
|
||||||
else if(result.first == disconnectPlayerPopupMenuIndex) {
|
else if(result.first == disconnectPlayerPopupMenuIndex) {
|
||||||
Lang &lang= Lang::getInstance();
|
Lang &lang= Lang::getInstance();
|
||||||
|
|
||||||
|
NetworkManager &networkManager= NetworkManager::getInstance();
|
||||||
|
NetworkRole role = networkManager.getNetworkRole();
|
||||||
|
ServerInterface *serverInterface = NULL;
|
||||||
|
if(role == nrServer) {
|
||||||
|
serverInterface = dynamic_cast<ServerInterface *>(networkManager.getServerInterface());
|
||||||
|
}
|
||||||
disconnectPlayerIndexMap.clear();
|
disconnectPlayerIndexMap.clear();
|
||||||
std::vector<string> menuItems;
|
std::vector<string> menuItems;
|
||||||
for(unsigned int i = 0; i < world.getFactionCount(); ++i) {
|
for(unsigned int i = 0; i < world.getFactionCount(); ++i) {
|
||||||
|
@ -3538,10 +3565,19 @@ void Game::mouseDownLeft(int x, int y) {
|
||||||
|
|
||||||
//printf("faction->getPersonalityType() = %d index [%d,%d] control [%d] networkstatus [%d]\n",faction->getPersonalityType(),world.getThisFaction()->getIndex(),faction->getIndex(),faction->getControlType(),this->gameSettings.getNetworkPlayerStatuses(i));
|
//printf("faction->getPersonalityType() = %d index [%d,%d] control [%d] networkstatus [%d]\n",faction->getPersonalityType(),world.getThisFaction()->getIndex(),faction->getIndex(),faction->getControlType(),this->gameSettings.getNetworkPlayerStatuses(i));
|
||||||
|
|
||||||
if(faction->getPersonalityType() != fpt_Observer &&
|
bool isSlotJoinInProgressClient = false;
|
||||||
|
if(serverInterface != NULL) {
|
||||||
|
ConnectionSlot *slot = serverInterface->getSlot(faction->getStartLocationIndex());
|
||||||
|
if(slot != NULL && slot->getConnectHasHandshaked() == true &&
|
||||||
|
slot->getCurrentFrameCount() <= 0) {
|
||||||
|
isSlotJoinInProgressClient = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isSlotJoinInProgressClient == true ||
|
||||||
|
(faction->getPersonalityType() != fpt_Observer &&
|
||||||
world.getThisFaction()->getIndex() != faction->getIndex() &&
|
world.getThisFaction()->getIndex() != faction->getIndex() &&
|
||||||
faction->getControlType() == ctNetwork &&
|
faction->getControlType() == ctNetwork &&
|
||||||
this->gameSettings.getNetworkPlayerStatuses(i) != npst_Disconnected) {
|
this->gameSettings.getNetworkPlayerStatuses(i) != npst_Disconnected)) {
|
||||||
|
|
||||||
char szBuf[8096]="";
|
char szBuf[8096]="";
|
||||||
if(lang.hasString("DisconnectNetorkPlayerIndex") == true) {
|
if(lang.hasString("DisconnectNetorkPlayerIndex") == true) {
|
||||||
|
|
|
@ -867,6 +867,20 @@ void ClientInterface::updateLobby() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case nmtQuit:
|
||||||
|
{
|
||||||
|
time_t receiveTimeElapsed = time(NULL);
|
||||||
|
NetworkMessageQuit networkMessageQuit;
|
||||||
|
bool gotCmd = receiveMessage(&networkMessageQuit);
|
||||||
|
if(gotCmd == false) {
|
||||||
|
throw megaglest_runtime_error("error retrieving nmtQuit returned false!");
|
||||||
|
}
|
||||||
|
|
||||||
|
quit= true;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
string sErr = string(extractFileFromDirectoryPath(__FILE__).c_str()) + "::" + string(__FUNCTION__) + " Unexpected network message: " + intToStr(networkMessageType);
|
string sErr = string(extractFileFromDirectoryPath(__FILE__).c_str()) + "::" + string(__FUNCTION__) + " Unexpected network message: " + intToStr(networkMessageType);
|
||||||
|
|
|
@ -924,6 +924,12 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) {
|
||||||
|
|
||||||
this->serverInterface->addClientToServerIPAddress(this->getSocket()->getConnectedIPAddress(this->getSocket()->getIpAddress()),this->connectedRemoteIPAddress);
|
this->serverInterface->addClientToServerIPAddress(this->getSocket()->getConnectedIPAddress(this->getSocket()->getIpAddress()),this->connectedRemoteIPAddress);
|
||||||
|
|
||||||
|
if(serverInterface->getGameHasBeenInitiated() == true &&
|
||||||
|
serverInterface->getAllowInGameConnections() == true) {
|
||||||
|
int factionIndex = this->serverInterface->gameSettings.getFactionIndexForStartLocation(playerIndex);
|
||||||
|
this->serverInterface->gameSettings.setNetworkPlayerStatuses(factionIndex,npst_None);
|
||||||
|
}
|
||||||
|
|
||||||
if(getAllowGameDataSynchCheck() == true && serverInterface->getGameSettings() != NULL) {
|
if(getAllowGameDataSynchCheck() == true && serverInterface->getGameSettings() != NULL) {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] sending NetworkMessageSynchNetworkGameData\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] sending NetworkMessageSynchNetworkGameData\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
@ -935,8 +941,6 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) {
|
||||||
serverInterface->getAllowInGameConnections() == true) {
|
serverInterface->getAllowInGameConnections() == true) {
|
||||||
//printf("Sent intro to client connection on slot!\n");
|
//printf("Sent intro to client connection on slot!\n");
|
||||||
|
|
||||||
//this->skipLagCheck = true;
|
|
||||||
//this->joinGameInProgress = true;
|
|
||||||
setJoinGameInProgressFlags();
|
setJoinGameInProgressFlags();
|
||||||
this->setPauseForInGameConnection(true);
|
this->setPauseForInGameConnection(true);
|
||||||
|
|
||||||
|
@ -1037,7 +1041,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) {
|
||||||
int factionIndex = this->serverInterface->gameSettings.getFactionIndexForStartLocation(playerIndex);
|
int factionIndex = this->serverInterface->gameSettings.getFactionIndexForStartLocation(playerIndex);
|
||||||
this->serverInterface->gameSettings.setFactionControl(factionIndex,ctNetwork);
|
this->serverInterface->gameSettings.setFactionControl(factionIndex,ctNetwork);
|
||||||
this->serverInterface->gameSettings.setNetworkPlayerName(factionIndex,this->name);
|
this->serverInterface->gameSettings.setNetworkPlayerName(factionIndex,this->name);
|
||||||
this->serverInterface->gameSettings.setNetworkPlayerStatuses(factionIndex,npst_None);
|
//this->serverInterface->gameSettings.setNetworkPlayerStatuses(factionIndex,npst_None);
|
||||||
|
|
||||||
this->serverInterface->broadcastGameSetup(&this->serverInterface->gameSettings, true);
|
this->serverInterface->broadcastGameSetup(&this->serverInterface->gameSettings, true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue