source: trunk/examples/ipc/localfortuneclient/client.cpp

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 5.4 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the examples of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:BSD$
10** You may use this file under the terms of the BSD license as follows:
11**
12** "Redistribution and use in source and binary forms, with or without
13** modification, are permitted provided that the following conditions are
14** met:
15** * Redistributions of source code must retain the above copyright
16** notice, this list of conditions and the following disclaimer.
17** * Redistributions in binary form must reproduce the above copyright
18** notice, this list of conditions and the following disclaimer in
19** the documentation and/or other materials provided with the
20** distribution.
21** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22** the names of its contributors may be used to endorse or promote
23** products derived from this software without specific prior written
24** permission.
25**
26** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#include <QtGui>
42#include <QtNetwork>
43
44#include "client.h"
45
46Client::Client(QWidget *parent)
47 : QDialog(parent)
48{
49 hostLabel = new QLabel(tr("&Server name:"));
50 hostLineEdit = new QLineEdit("fortune");
51
52 hostLabel->setBuddy(hostLineEdit);
53
54 statusLabel = new QLabel(tr("This examples requires that you run the "
55 "Fortune Server example as well."));
56
57 getFortuneButton = new QPushButton(tr("Get Fortune"));
58 getFortuneButton->setDefault(true);
59
60 quitButton = new QPushButton(tr("Quit"));
61
62 buttonBox = new QDialogButtonBox;
63 buttonBox->addButton(getFortuneButton, QDialogButtonBox::ActionRole);
64 buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
65
66 socket = new QLocalSocket(this);
67
68 connect(hostLineEdit, SIGNAL(textChanged(QString)),
69 this, SLOT(enableGetFortuneButton()));
70 connect(getFortuneButton, SIGNAL(clicked()),
71 this, SLOT(requestNewFortune()));
72 connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
73 connect(socket, SIGNAL(readyRead()), this, SLOT(readFortune()));
74 connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
75 this, SLOT(displayError(QLocalSocket::LocalSocketError)));
76
77 QGridLayout *mainLayout = new QGridLayout;
78 mainLayout->addWidget(hostLabel, 0, 0);
79 mainLayout->addWidget(hostLineEdit, 0, 1);
80 mainLayout->addWidget(statusLabel, 2, 0, 1, 2);
81 mainLayout->addWidget(buttonBox, 3, 0, 1, 2);
82 setLayout(mainLayout);
83
84 setWindowTitle(tr("Fortune Client"));
85 hostLineEdit->setFocus();
86}
87
88void Client::requestNewFortune()
89{
90 getFortuneButton->setEnabled(false);
91 blockSize = 0;
92 socket->abort();
93 socket->connectToServer(hostLineEdit->text());
94}
95
96void Client::readFortune()
97{
98 QDataStream in(socket);
99 in.setVersion(QDataStream::Qt_4_0);
100
101 if (blockSize == 0) {
102 if (socket->bytesAvailable() < (int)sizeof(quint16))
103 return;
104 in >> blockSize;
105 }
106
107 if (in.atEnd())
108 return;
109
110 QString nextFortune;
111 in >> nextFortune;
112
113 if (nextFortune == currentFortune) {
114 QTimer::singleShot(0, this, SLOT(requestNewFortune()));
115 return;
116 }
117
118 currentFortune = nextFortune;
119 statusLabel->setText(currentFortune);
120 getFortuneButton->setEnabled(true);
121}
122
123void Client::displayError(QLocalSocket::LocalSocketError socketError)
124{
125 switch (socketError) {
126 case QLocalSocket::ServerNotFoundError:
127 QMessageBox::information(this, tr("Fortune Client"),
128 tr("The host was not found. Please check the "
129 "host name and port settings."));
130 break;
131 case QLocalSocket::ConnectionRefusedError:
132 QMessageBox::information(this, tr("Fortune Client"),
133 tr("The connection was refused by the peer. "
134 "Make sure the fortune server is running, "
135 "and check that the host name and port "
136 "settings are correct."));
137 break;
138 case QLocalSocket::PeerClosedError:
139 break;
140 default:
141 QMessageBox::information(this, tr("Fortune Client"),
142 tr("The following error occurred: %1.")
143 .arg(socket->errorString()));
144 }
145
146 getFortuneButton->setEnabled(true);
147}
148
149void Client::enableGetFortuneButton()
150{
151 getFortuneButton->setEnabled(!hostLineEdit->text().isEmpty());
152}
Note: See TracBrowser for help on using the repository browser.