next steps startwindow-integration --> UNSTABLE

This commit is contained in:
doitux
2008-09-17 21:50:51 +00:00
parent 49b1efdcf1
commit 2748799679
10 changed files with 393 additions and 506 deletions
+356 -1
View File
@@ -19,6 +19,8 @@
***************************************************************************/
#include "startwindowimpl.h"
#include "playerinterface.h"
#include <gamedata.h>
#include <generic/serverguiwrapper.h>
#include <net/socket_msg.h>
@@ -84,7 +86,6 @@ startWindowImpl::startWindowImpl(ConfigFile *c)
myTimeoutDialog = new timeoutMsgBoxImpl(this);
connect( actionStart_Local_Game, SIGNAL( triggered() ), this, SLOT( callNewGameDialog() ) );
connect( pushButtonStart_Local_Game, SIGNAL( clicked() ), this, SLOT( callNewGameDialog() ) );
connect( actionInternet_Game, SIGNAL( triggered() ), this, SLOT( callGameLobbyDialog() ) );
@@ -129,6 +130,15 @@ startWindowImpl::startWindowImpl(ConfigFile *c)
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myStartNetworkGameDialog, SLOT(receiveChatMsg(QString, QString)));
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myGuiInterface->getMyW()->getMyChat(), SLOT(receiveMessage(QString, QString)));
connect(this, SIGNAL(signalNetClientShowTimeoutDialog(int, unsigned)), this, SLOT(showTimeoutDialog(int, unsigned)));
// Errors are handled globally, not within one dialog.
connect(this, SIGNAL(signalNetClientError(int, int)), this, SLOT(networkError(int, int)));
connect(this, SIGNAL(signalNetClientNotification(int)), this, SLOT(networkNotification(int)));
connect(this, SIGNAL(signalNetServerError(int, int)), this, SLOT(networkError(int, int)));
connect(this, SIGNAL(signalNetClientRemovedFromGame(int)), this, SLOT(networkNotification(int)));
connect(this, SIGNAL(signalNetClientGameStart(boost::shared_ptr<Game>)), this, SLOT(networkStart(boost::shared_ptr<Game>)));
connect(this, SIGNAL(signalIrcConnect(QString)), myGameLobbyDialog->getLobbyChat(), SLOT(connected(QString)));
connect(this, SIGNAL(signalIrcSelfJoined(QString, QString)), myGameLobbyDialog->getLobbyChat(), SLOT(selfJoined(QString, QString)));
connect(this, SIGNAL(signalIrcPlayerJoined(QString)), myGameLobbyDialog->getLobbyChat(), SLOT(playerJoined(QString)));
@@ -520,3 +530,348 @@ void startWindowImpl::callSettingsDialog() {
myGuiInterface->getMyW()->applySettings(mySettingsDialog);
}
}
void startWindowImpl::showTimeoutDialog(int msgID, unsigned duration) {
if(myTimeoutDialog->isHidden()) {
myTimeoutDialog->setMySession(mySession);
myTimeoutDialog->setMsgID((NetTimeoutReason)msgID);
myTimeoutDialog->setTimeoutDuration(duration);
myTimeoutDialog->show();
myTimeoutDialog->raise();
myTimeoutDialog->activateWindow();
myTimeoutDialog->startTimeout();
}
}
void startWindowImpl::hideTimeoutDialog() { myTimeoutDialog->hide(); }
void startWindowImpl::networkError(int errorID, int /*osErrorID*/) {
hideTimeoutDialog();
switch (errorID) {
case ERR_SOCK_SERVERADDR_NOT_SET:
{QMessageBox::warning(this, tr("Network Error"),
tr("Server address was not set."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_PORT:
{ QMessageBox::warning(this, tr("Network Error"),
tr("An invalid port was set (ports 0-1023 are not allowed)."),
QMessageBox::Close); }
break;
case ERR_SOCK_CREATION_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not create a socket for TCP communication."),
QMessageBox::Close); }
break;
case ERR_SOCK_SET_ADDR_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not set the IP address."),
QMessageBox::Close); }
break;
case ERR_SOCK_SET_PORT_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not set the port for this type of address."),
QMessageBox::Close); }
break;
case ERR_SOCK_RESOLVE_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The server name could not be resolved."),
QMessageBox::Close); }
break;
case ERR_SOCK_BIND_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Bind failed - please choose a different port."),
QMessageBox::Close); }
break;
case ERR_SOCK_LISTEN_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal network error: \"listen\" failed."),
QMessageBox::Close); }
break;
case ERR_SOCK_ACCEPT_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Server execution was terminated."),
QMessageBox::Close); }
break;
case ERR_SOCK_CONNECT_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not connect to the server."),
QMessageBox::Close); }
break;
case ERR_SOCK_CONNECT_TIMEOUT:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Connection timed out.\nPlease check the server address.\n\nIf the server is behind a NAT-Router, make sure port forwarding has been set up on server side."),
QMessageBox::Close); }
break;
case ERR_SOCK_SELECT_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal network error: \"select\" failed."),
QMessageBox::Close); }
break;
case ERR_SOCK_SEND_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal network error: \"send\" failed."),
QMessageBox::Close); }
break;
case ERR_SOCK_RECV_FAILED: // Sometimes windows reports recv failed on close.
case ERR_SOCK_CONN_RESET:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Connection was closed by the server."),
QMessageBox::Close); }
break;
case ERR_SOCK_CONN_EXISTS:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal network error: Duplicate TCP connection."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_PACKET:
{ QMessageBox::warning(this, tr("Network Error"),
tr("An invalid network packet was received.\nPlease make sure that all players use the same version of PokerTH."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_STATE:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal state error.\nPlease make sure that all players use the same version of PokerTH."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_SERVERLIST_URL:
case ERR_SOCK_DOWNLOAD_INVALID_URL:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Invalid server list URL.\nPlease correct the address in the settings."),
QMessageBox::Close); }
break;
case ERR_SOCK_OPEN_MD5_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not open the server list MD5 file.\nPlease make sure that the server list URL is correct."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_SERVERLIST_MD5:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Synchronization of the PokerTH internet server list has failed.\nPlease make sure that the server list URL is correct."),
QMessageBox::Close); }
break;
case ERR_SOCK_INVALID_SERVERLIST_XML:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The PokerTH internet server list contains invalid data.\nIf you use a custom server list, please make sure its format is correct."),
QMessageBox::Close); }
break;
case ERR_SOCK_UNZIP_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not unzip the PokerTH internet server list."),
QMessageBox::Close); }
break;
case ERR_SOCK_DOWNLOAD_INIT_FAILED:
case ERR_SOCK_DOWNLOAD_SELECT_FAILED:
case ERR_SOCK_DOWNLOAD_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not download the PokerTH internet server list.\nPlease make sure you are directly connected to the internet."),
QMessageBox::Close); }
break;
case ERR_SOCK_DOWNLOAD_OPEN_FAILED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not open the target file when downloading the server list."),
QMessageBox::Close); }
break;
case ERR_NET_VERSION_NOT_SUPPORTED:
{ QMessageBox msgBox(QMessageBox::Warning, tr("Network Error"),
tr("The PokerTH server does not support this version of the game.<br>Please go to <a href=\"http://www.pokerth.net/\" target=\"_blank\">http://www.pokerth.net</a> and download the latest version."),
QMessageBox::Close, this);
msgBox.setTextFormat(Qt::RichText);
msgBox.exec();
}
break;
case ERR_NET_SERVER_FULL:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Sorry, this server is already full."),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_PASSWORD:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Invalid password when joining the game.\nPlease reenter the password and try again."),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_PASSWORD_STR:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The password is too long. Please choose another one."),
QMessageBox::Close); }
break;
case ERR_NET_PLAYER_NAME_IN_USE:
{ /*myChangeHumanPlayerNameDialog->label_Message->setText(tr("Your player name is already used by another player.\nPlease choose a different name."));
myChangeHumanPlayerNameDialog->exec();*/ }
break;
case ERR_NET_INVALID_PLAYER_NAME:
{ /*myChangeHumanPlayerNameDialog->label_Message->setText(tr("The player name is too short, too long or invalid. Please choose another one."));
myChangeHumanPlayerNameDialog->exec();*/ }
break;
case ERR_NET_INVALID_GAME_NAME:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The game name is either too short or too long. Please choose another one."),
QMessageBox::Close); }
break;
case ERR_NET_UNKNOWN_GAME:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The game could not be found."),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_CHAT_TEXT:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The chat text is invalid."),
QMessageBox::Close); }
break;
case ERR_NET_UNKNOWN_PLAYER_ID:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The server referred to an unknown player. Aborting."),
QMessageBox::Close); }
break;
case ERR_NET_NO_CURRENT_PLAYER:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal error: The current player could not be found."),
QMessageBox::Close); }
break;
case ERR_NET_PLAYER_NOT_ACTIVE:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Internal error: The current player is not active."),
QMessageBox::Close); }
break;
case ERR_NET_PLAYER_KICKED:
{ mySession->terminateNetworkClient();
QMessageBox::warning(this, tr("Network Error"),
tr("You were kicked from the server."),
QMessageBox::Close); }
break;
case ERR_NET_PLAYER_BANNED:
{ mySession->terminateNetworkClient();
QMessageBox::warning(this, tr("Network Error"),
tr("You were temporarily banned from the server."),
QMessageBox::Close); }
break;
case ERR_NET_SESSION_TIMED_OUT:
{ mySession->terminateNetworkClient();
QMessageBox::warning(this, tr("Network Error"),
tr("Your server connection timed out due to inactivity. You are very welcome to reconnect!"),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_PLAYER_COUNT:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The client player count is invalid."),
QMessageBox::Close); }
break;
case ERR_NET_TOO_MANY_MANUAL_BLINDS:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Too many manual blinds were set. Please reconfigure the manual blinds."),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_AVATAR_FILE:
case ERR_NET_WRONG_AVATAR_SIZE:
{ QMessageBox::warning(this, tr("Network Error"),
tr("An invalid avatar file was configured. Please choose a different avatar."),
QMessageBox::Close); }
break;
case ERR_NET_AVATAR_TOO_LARGE:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The selected avatar file is too large. Please choose a different avatar."),
QMessageBox::Close); }
break;
case ERR_NET_AVATAR_UPLOAD_BLOCKED:
{ QMessageBox::warning(this, tr("Network Error"),
tr("You cannot upload a new avatar file at this time. Please try again in a few seconds."),
QMessageBox::Close); }
break;
case ERR_NET_INVALID_REQUEST_ID:
{ QMessageBox::warning(this, tr("Network Error"),
tr("An internal avatar error occured. Please report this to an admin in the lobby chat."),
QMessageBox::Close); }
break;
case ERR_NET_START_TIMEOUT:
{ QMessageBox::warning(this, tr("Network Error"),
tr("Could not start game: Synchronization failed."),
QMessageBox::Close); }
break;
case ERR_NET_SERVER_MAINTENANCE:
{ QMessageBox::warning(this, tr("Network Error"),
tr("The server is down for maintenance. Please try again later."),
QMessageBox::Close); }
break;
default: { QMessageBox::warning(this, tr("Network Error"),
tr("An internal error occured."),
QMessageBox::Close); }
}
// close dialogs
myGameLobbyDialog->reject();
myConnectToServerDialog->reject();
myStartNetworkGameDialog->reject();
}
void startWindowImpl::networkNotification(int notificationId)
{
hideTimeoutDialog();
switch (notificationId)
{
case NTF_NET_REMOVED_KICKED:
{ QMessageBox::warning(this, tr("Network Notification"),
tr("You were kicked from the game."),
QMessageBox::Close); }
break;
case NTF_NET_REMOVED_GAME_FULL:
case NTF_NET_JOIN_GAME_FULL:
{ QMessageBox::warning(this, tr("Network Notification"),
tr("Sorry, this game is already full."),
QMessageBox::Close); }
break;
case NTF_NET_REMOVED_ALREADY_RUNNING:
case NTF_NET_JOIN_ALREADY_RUNNING:
{ QMessageBox::warning(this, tr("Network Notification"),
tr("Unable to join - the server has already started the game."),
QMessageBox::Close); }
break;
case NTF_NET_REMOVED_TIMEOUT:
{ QMessageBox::warning(this, tr("Network Notification"),
tr("Your admin state timed out due to inactivity. Feel free to create a new game!"),
QMessageBox::Close); }
break;
case NTF_NET_JOIN_INVALID_PASSWORD:
{ QMessageBox::warning(this, tr("Network Notification"),
tr("Invalid password when joining the game.\nPlease reenter the password and try again."),
QMessageBox::Close); }
break;
case NTF_NET_NEW_RELEASE_AVAILABLE:
{ QMessageBox msgBox(QMessageBox::Information, tr("Network Notification"),
tr("A new release of PokerTH is available.<br>Please go to <a href=\"http://www.pokerth.net/\" target=\"_blank\">http://www.pokerth.net</a> and download the latest version."),
QMessageBox::Close, this);
msgBox.setTextFormat(Qt::RichText);
msgBox.exec();
}
break;
case NTF_NET_OUTDATED_BETA:
{ QMessageBox msgBox(QMessageBox::Information, tr("Network Notification"),
tr("This beta release of PokerTH is outdated.<br>Please go to <a href=\"http://www.pokerth.net/\" target=\"_blank\">http://www.pokerth.net</a> and download the latest version."),
QMessageBox::Close, this);
msgBox.setTextFormat(Qt::RichText);
msgBox.exec();
}
break;
}
}
void startWindowImpl::networkStart(boost::shared_ptr<Game> game)
{
mySession->startClientGame(game);
//send playerNicksList to chat for nick-autocompletition
myGuiInterface->getMyW()->getMyChat()->setPlayerNicksList(getPlayerNicksList());
}
QStringList startWindowImpl::getPlayerNicksList() {
QStringList list;
PlayerListConstIterator it_c;
for (it_c=mySession->getCurrentGame()->getSeatsList()->begin(); it_c!=mySession->getCurrentGame()->getSeatsList()->end(); it_c++) {
list << QString::fromUtf8((*it_c)->getMyName().c_str());
}
return list;
}