26 #include "kmessageio.h"
27 #include "kmessageserver.h"
29 #include "kmessageclient.h"
31 class KMessageClientPrivate
34 KMessageClientPrivate ()
35 : adminID (0), connection (0)
38 ~KMessageClientPrivate ()
44 TQValueList <TQ_UINT32> clientList;
48 TQValueList <TQByteArray> delayedMessages;
52 : TQObject (parent, name)
54 d =
new KMessageClientPrivate ();
60 d->delayedMessages.clear();
83 kdDebug (11001) << k_funcinfo <<
": We are changing the server!" << endl;
86 d->connection = connection;
89 connect (connection, TQT_SIGNAL (received(
const TQByteArray &)),
100 return (d->connection) ? d->connection->id () : 0;
115 return d->clientList;
120 return d->connection && d->connection->isConnected();
125 return isConnected() ? d->connection->isNetwork() :
false;
130 return d->connection ? d->connection->peerPort() : 0;
135 return d->connection ? d->connection->peerName() : TQString::fromLatin1(
"localhost");
144 kdWarning (11001) << k_funcinfo <<
": We have no connection yet!" << endl;
147 d->connection->send (msg);
152 TQByteArray sendBuffer;
153 TQBuffer buffer (sendBuffer);
154 buffer.open (IO_WriteOnly);
155 TQDataStream stream (&buffer);
157 stream << static_cast<TQ_UINT32> ( KMessageServer::REQ_BROADCAST );
158 TQT_TQIODEVICE(&buffer)->writeBlock (msg);
164 TQByteArray sendBuffer;
165 TQBuffer buffer (sendBuffer);
166 buffer.open (IO_WriteOnly);
167 TQDataStream stream (&buffer);
169 stream << static_cast<TQ_UINT32>( KMessageServer::REQ_FORWARD ) << clients;
170 TQT_TQIODEVICE(&buffer)->writeBlock (msg);
176 sendForward (msg, TQValueList <TQ_UINT32> () << client);
186 d->delayedMessages.append(msg);
189 if (d->delayedMessages.count() > 0)
191 d->delayedMessages.append (msg);
192 TQByteArray first = d->delayedMessages.front();
193 d->delayedMessages.pop_front();
206 d->delayedMessages.append(msg);
209 TQBuffer in_buffer (msg);
210 in_buffer.open (IO_ReadOnly);
211 TQDataStream in_stream (&in_buffer);
214 bool unknown =
false;
217 in_stream >> messageID;
220 case KMessageServer::MSG_BROADCAST:
223 in_stream >> clientID;
228 case KMessageServer::MSG_FORWARD:
231 TQValueList <TQ_UINT32> receivers;
232 in_stream >> clientID >> receivers;
237 case KMessageServer::ANS_CLIENT_ID:
241 in_stream >> clientID;
242 d->connection->setId (clientID);
248 case KMessageServer::ANS_ADMIN_ID:
251 in_stream >> d->adminID;
257 case KMessageServer::ANS_CLIENT_LIST:
259 in_stream >> d->clientList;
263 case KMessageServer::EVNT_CLIENT_CONNECTED:
268 if (d->clientList.contains (
id))
269 kdWarning (11001) << k_funcinfo <<
": Adding a client that already existed!" << endl;
271 d->clientList.append (
id);
277 case KMessageServer::EVNT_CLIENT_DISCONNECTED:
281 in_stream >>
id >> broken;
283 if (!d->clientList.contains (
id))
284 kdWarning (11001) << k_funcinfo <<
": Removing a client that doesn't exist!" << endl;
286 d->clientList.remove (
id);
296 if (!unknown && !in_buffer.atEnd())
297 kdWarning (11001) << k_funcinfo <<
": Extra data received for message ID " << messageID << endl;
302 kdWarning (11001) << k_funcinfo <<
": received unknown message ID " << messageID << endl;
311 if (d->delayedMessages.count() == 0)
313 kdDebug(11001) << k_funcinfo <<
": no messages delayed" << endl;
316 TQByteArray first = d->delayedMessages.front();
317 d->delayedMessages.pop_front();
323 kdDebug (11001) << k_funcinfo <<
": timer single shot for removeBrokenConnection"<<
this << endl;
325 TQTimer::singleShot( 0,
this, TQT_SLOT(removeBrokenConnection2()) );
330 void KMessageClient::removeBrokenConnection2 ()
332 kdDebug (11001) << k_funcinfo <<
": Broken:Deleting the connection object"<<
this << endl;
335 delete d->connection;
339 kdDebug (11001) << k_funcinfo <<
": Broken:Deleting the connection object DONE" << endl;
344 kdDebug (11001) << k_funcinfo <<
": Disconnect:Deleting the connection object" << endl;
347 delete d->connection;
351 kdDebug (11001) << k_funcinfo <<
": Disconnect:Deleting the connection object DONE" << endl;
362 for (
unsigned int i = 0; i < d->delayedMessages.count(); i++)
370 return d->delayedMessages.count();
373 #include "kmessageclient.moc"