138{
139 QLocalSocket* socket =
server->nextPendingConnection();
140 if (!socket)
141 return;
142
143 while (true) {
144 if (socket->state() == QLocalSocket::UnconnectedState) {
145 qWarning("QtLocalPeer: Peer disconnected");
146 delete socket;
147 return;
148 }
149 if (socket->bytesAvailable() >= qint64(sizeof(quint32)))
150 break;
151 socket->waitForReadyRead();
152 }
153
154 QDataStream ds(socket);
155 QByteArray uMsg;
156 quint32 remaining;
157 ds >> remaining;
158 uMsg.resize(remaining);
159 int got = 0;
160 char* uMsgBuf = uMsg.data();
161 do {
162 got = ds.readRawData(uMsgBuf, remaining);
163 remaining -= got;
164 uMsgBuf += got;
165 } while (remaining && got >= 0 && socket->waitForReadyRead(2000));
166 if (got < 0) {
167 qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData());
168 delete socket;
169 return;
170 }
171 QString message(QString::fromUtf8(uMsg));
172 socket->write(
ack, qstrlen(
ack));
173 socket->waitForBytesWritten(1000);
174 socket->waitForDisconnected(1000);
175 delete socket;
177}
void messageReceived(const QString &message)