{
ui->setupUi(this);
- connect(&serverSocket, SIGNAL(connected()), this, SLOT(serverConnected()));
- connect(&serverSocket, SIGNAL(disconnected()), this, SLOT(serverDisconnected()));
- connect(&serverSocket, SIGNAL(readyRead()), this, SLOT(serverDataAvailable()));
- connect(&serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverError()));
+ createStates();
+ createTransitions();
+ createConnections();
- connectToServer();
+ stateMachine.setInitialState(disconnectedState);
+ QTimer::singleShot(0, &stateMachine, SLOT(start()));
}
MainWindow::~MainWindow()
serverSocket.disconnectFromHost();
}
-void MainWindow::serverConnected()
+void MainWindow::createStates()
{
- ui->testButton->setEnabled(true);
- ui->actionConnect->setChecked(true);
-}
+ disconnectedState = new QState(&stateMachine);
+ disconnectedState->assignProperty(ui->networkButton, "text", "Connect");
+ disconnectedState->assignProperty(ui->networkButton, "enabled", true);
-void MainWindow::serverDisconnected()
-{
- ui->testButton->setEnabled(false);
- ui->actionConnect->setChecked(false);
-}
+ connectedState = new QState(&stateMachine);
-void MainWindow::serverDataAvailable()
-{
- QTextStream stream(&serverSocket);
- ui->textEdit->setText(stream.readAll());
-}
+ connectingState = new QState(connectedState);
+ connectingState->assignProperty(ui->networkButton, "text", "Connecting");
+ connectingState->assignProperty(ui->networkButton, "enabled", false);
-void MainWindow::serverError()
-{
- ui->textEdit->setText(serverSocket.errorString());
- ui->actionConnect->setChecked(serverSocket.state() == QTcpSocket::ConnectedState);
- // clean the error window after 2 secs
- QTimer::singleShot(2000, this, SLOT(cleanError()));
-}
+ normalState = new QState(connectedState);
+ normalState->assignProperty(ui->networkButton, "text", "Disconnect");
+ normalState->assignProperty(ui->networkButton, "enabled", true);
-void MainWindow::cleanError()
-{
- ui->textEdit->clear();
+ disconnectingState = new QState(connectedState);
+ disconnectingState->assignProperty(ui->networkButton, "text", "Disconnecting");
+ disconnectingState->assignProperty(ui->networkButton, "enabled", false);
}
-void MainWindow::on_testButton_clicked()
+void MainWindow::createTransitions()
{
- QTextStream stream(&serverSocket);
- stream << JsonEngine().playerGetActivePlayers();
+ disconnectedState->addTransition(ui->networkButton, SIGNAL(clicked()), connectingState);
+
+ connectedState->addTransition(&serverSocket, SIGNAL(disconnected()), disconnectedState);
+
+ connectingState->addTransition(&serverSocket, SIGNAL(connected()), normalState);
+ connectingState->addTransition(&serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), disconnectedState);
+
+ normalState->addTransition(ui->networkButton, SIGNAL(clicked()), disconnectingState);
}
-void MainWindow::on_actionConnect_triggered(bool checked)
+void MainWindow::createConnections()
{
- qDebug("menu state: %d", checked);
- if (checked) {
- connectToServer();
- } else {
- disconnectFromServer();
- }
+ connect(connectingState, SIGNAL(entered()), this, SLOT(connectToServer()));
+ connect(disconnectingState, SIGNAL(entered()), this, SLOT(disconnectFromServer()));
}