1
/****************************************************************************
3
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
5
** This file is part of the example classes of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
36
Server::Server(QWidget *parent)
39
statusLabel = new QLabel;
40
quitButton = new QPushButton(tr("Quit"));
41
quitButton->setAutoDefault(false);
43
tcpServer = new QTcpServer(this);
44
if (!tcpServer->listen()) {
45
QMessageBox::critical(this, tr("Fortune Server"),
46
tr("Unable to start the server: %1.")
47
.arg(tcpServer->errorString()));
52
statusLabel->setText(tr("The server is running on port %1.\n"
53
"Run the Fortune Client example now.")
54
.arg(tcpServer->serverPort()));
56
fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
57
<< tr("You've got to think about tomorrow.")
58
<< tr("You will be surprised by a loud noise.")
59
<< tr("You will feel hungry again in another hour.")
60
<< tr("You might have mail.")
61
<< tr("You cannot kill time without injuring eternity.")
62
<< tr("Computers are not intelligent. They only think they are.");
64
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
65
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));
67
QHBoxLayout *buttonLayout = new QHBoxLayout;
68
buttonLayout->addStretch(1);
69
buttonLayout->addWidget(quitButton);
71
QVBoxLayout *mainLayout = new QVBoxLayout;
72
mainLayout->addWidget(statusLabel);
73
mainLayout->addLayout(buttonLayout);
74
setLayout(mainLayout);
76
setWindowTitle(tr("Fortune Server"));
79
void Server::sendFortune()
82
QDataStream out(&block, QIODevice::WriteOnly);
83
out.setVersion(QDataStream::Qt_4_0);
85
out << fortunes.at(rand() % fortunes.size());
86
out.device()->seek(0);
87
out << (quint16)(block.size() - sizeof(quint16));
89
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
90
connect(clientConnection, SIGNAL(disconnected()),
91
clientConnection, SLOT(deleteLater()));
93
clientConnection->write(block);
94
clientConnection->close();