• Skip to content
  • Skip to link menu
KDE 4.0 API Reference
  • KDE API Reference
  • kdenetwork
  • Sitemap
  • Contact Us
 

kopete/protocols/messenger/libpapillon

papillonclientstream.cpp

Go to the documentation of this file.
00001 /*
00002    papillonclientstream.cpp - Represent a stream with a Messenger server.
00003 
00004    Copyright (c) 2006 by Michaƫl Larouche <larouche@kde.org>
00005 
00006    *************************************************************************
00007    *                                                                       *
00008    * This library is free software; you can redistribute it and/or         *
00009    * modify it under the terms of the GNU Lesser General Public            *
00010    * License as published by the Free Software Foundation; either          *
00011    * version 2 of the License, or (at your option) any later version.      *
00012    *                                                                       *
00013    *************************************************************************
00014 */
00015 #include "Papillon/ClientStream"
00016 
00017 // Qt includes
00018 #include <QtCore/QQueue>
00019 #include <QtCore/QPointer>
00020 #include <QtDebug>
00021 
00022 // Papillon includes.
00023 #include "Papillon/NetworkMessage"
00024 #include "Papillon/MessengerCoreProtocol"
00025 #include "Papillon/Base/Connector"
00026 #include "Papillon/Base/ByteStream"
00027 
00028 namespace Papillon 
00029 {
00030 
00031 class ClientStream::Private
00032 {
00033 public:
00034     Private()
00035      : connector(0)
00036     {}
00037 
00038     ~Private()
00039     {}
00040 
00041     Connector *connector;
00042     ByteStream *byteStream;
00043     MessengerCoreProtocol protocol;
00044 
00045     QQueue<NetworkMessage*> networkMessageQueue;
00046 };
00047 
00048 ClientStream::ClientStream(Connector *connector, QObject *parent)
00049  : Stream(parent), d(new Private)
00050 {
00051     d->connector = connector;
00052     connect(d->connector, SIGNAL(connected()), this, SLOT(slotConnectorConnected()));
00053     connect( &d->protocol, SIGNAL( outgoingData( const QByteArray& ) ), this, SLOT(slotProtocolOutgoingData(const QByteArray&)) );
00054     connect( &d->protocol, SIGNAL( incomingData() ), this, SLOT(slotProtocolIncomingData()) );
00055 }
00056 
00057 
00058 ClientStream::~ClientStream()
00059 {
00060     delete d;
00061 }
00062 
00063 void ClientStream::connectToServer(const QString &server, quint16 port)
00064 {
00065     d->connector->connectToServer(server, port);
00066 }
00067 
00068 void ClientStream::slotConnectorConnected()
00069 {
00070     d->byteStream = d->connector->stream();
00071     connect(d->byteStream, SIGNAL(connectionClosed()), SLOT(slotByteStreamConnectionClosed()));
00072     connect(d->byteStream, SIGNAL(readyRead()), SLOT(slotByteStreamReadyRead()));
00073     connect(d->byteStream, SIGNAL(bytesWritten(int)), SLOT(slotByteStreamBytesWritten(int)));
00074 
00075     QByteArray spare = d->byteStream->read();
00076 
00077     QPointer<QObject> self = this;
00078     emit connected();
00079 
00080     if(!self)
00081         return;
00082 }
00083 
00084 void ClientStream::reset(bool all)
00085 {
00086     // reset connector
00087     if(d->byteStream) 
00088     {
00089         d->byteStream->close();
00090         d->byteStream = 0;
00091     }
00092     d->connector->done();
00093 
00094     // reset state machine
00095     d->protocol.reset();
00096 
00097     if(all)
00098         d->networkMessageQueue.clear();
00099 }
00100 
00101 void ClientStream::slotProtocolIncomingData()
00102 {
00103     NetworkMessage * incoming = d->protocol.incomingNetworkMessage();
00104     if( incoming )
00105     {
00106         d->networkMessageQueue.enqueue( incoming );
00107         emit readyRead();
00108     }
00109 }
00110 
00111 void ClientStream::slotProtocolOutgoingData(const QByteArray &data)
00112 {
00113     d->byteStream->write(data);
00114 }
00115 
00116 void ClientStream::slotByteStreamConnectionClosed()
00117 {
00118     emit connectionClosed();
00119 }
00120 
00121 void ClientStream::slotByteStreamReadyRead()
00122 {
00123     d->protocol.addIncomingData( d->byteStream->read() );
00124 }
00125 
00126 void ClientStream::slotByteStreamBytesWritten(int bytes)
00127 {
00128     
00129 }
00130 
00131 void ClientStream::close()
00132 {
00133     d->connector->done();
00134 }
00135 
00136 int ClientStream::errorCondition() const
00137 {
00138     return 0;
00139 }
00140 
00141 QString ClientStream::errorText() const
00142 {
00143     return QString();
00144 }
00145 
00146 
00147 bool ClientStream::networkMessagesAvailable() const
00148 {
00149     return !d->networkMessageQueue.isEmpty();
00150 }
00151 
00152 NetworkMessage *ClientStream::read()
00153 {
00154     if( d->networkMessageQueue.isEmpty() )
00155         return 0;
00156     else
00157         return d->networkMessageQueue.dequeue();
00158 }
00159 
00160 void ClientStream::write(NetworkMessage *networkMessage)
00161 {
00162     qDebug() << Q_FUNC_INFO << "Sending:" << networkMessage->toString().replace("\r\n", "");
00163 
00164     d->protocol.outgoingNetworkMessage(networkMessage);
00165 }
00166 
00167 }
00168 
00169 #include "papillonclientstream.moc"

kopete/protocols/messenger/libpapillon

Skip menu "kopete/protocols/messenger/libpapillon"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdenetwork

Skip menu "kdenetwork"
  • kget
  • kopete
  •   kopete
  •   libkopete
  •       libpapillon
  • krfb
Generated for kdenetwork by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal