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

kopete/protocols/messenger/libpapillon

connection.cpp

Go to the documentation of this file.
00001 /*
00002    connection.cpp - Connection with a Messenger service.
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/Connection"
00016 
00017 // Qt includes
00018 #include <QtDebug>
00019 
00020 // Papillon includes
00021 #include "Papillon/Task"
00022 #include "Papillon/ClientStream"
00023 #include "Papillon/NetworkMessage"
00024 #include "Papillon/Client"
00025 
00026 namespace Papillon 
00027 {
00028 
00029 class Connection::Private
00030 {
00031 public:
00032     Private()
00033      : rootTask(0), stream(0), client(0), transactionId(0),
00034        isConnected(false)
00035     {}
00036 
00037     ~Private()
00038     {
00039         delete rootTask;
00040         delete stream;
00041     }
00042 
00043     Task *rootTask;
00044     ClientStream *stream;
00045     Client *client;
00046 
00047     int transactionId;
00048     bool isConnected;
00049     QString server;
00050     int port;
00051 };
00052 
00053 Connection::Connection(ClientStream *stream, QObject *parent)
00054  : QObject(parent), d(new Private)
00055 {
00056     d->rootTask = new Task(this, true);
00057     d->stream = stream;
00058 
00059     connect(d->stream, SIGNAL(readyRead()), this, SLOT(networkMessageReceived()));
00060     connect(d->stream, SIGNAL(connected()), this, SLOT(slotConnected()));
00061     connect(d->stream, SIGNAL(connectionClosed()), this, SLOT(slotDisconnected()));
00062 }
00063 
00064 Connection::~Connection()
00065 {
00066     delete d;
00067 }
00068 
00069 Task *Connection::rootTask()
00070 {
00071     return d->rootTask;
00072 }
00073 
00074 Client *Connection::client()
00075 {
00076     return d->client;
00077 }
00078 
00079 void Connection::setClient(Client *client)
00080 {
00081     d->client = client;
00082 }
00083 
00084 int Connection::transactionId()
00085 {
00086     return ++d->transactionId;
00087 }
00088 
00089 bool Connection::isConnected()
00090 {
00091     return d->isConnected;
00092 }
00093 
00094 void Connection::connectToServer(const QString &server, quint16 port)
00095 {
00096     d->server = server;
00097     d->port = port;
00098     
00099     d->stream->connectToServer(d->server, d->port);
00100 }
00101 
00102 void Connection::disconnectFromServer()
00103 {
00104     d->stream->close();
00105 }
00106 
00107 void Connection::send(NetworkMessage *transfer)
00108 {
00109     d->stream->write(transfer);
00110 }
00111 
00112 void Connection::networkMessageReceived()
00113 {
00114     NetworkMessage *readNetworkMessage = d->stream->read();
00115     if(readNetworkMessage)
00116     {
00117         qDebug() << Q_FUNC_INFO << "Dispatch received NetworkMessage to tasks.";
00118         dispatchNetworkMessage( readNetworkMessage );
00119     }
00120     else
00121     {
00122         qDebug() << Q_FUNC_INFO << "Got a null NetworkMessage, investigate.";
00123     }
00124 }
00125 
00126 void Connection::dispatchNetworkMessage(NetworkMessage *networkMessage)
00127 {
00128     if( !d->rootTask->take(networkMessage) )
00129     {
00130         qDebug() << Q_FUNC_INFO << "Root task refused the NetworkMessage." << "NetworkMessage was:" << networkMessage->toString();
00131     }
00132     
00133     delete networkMessage;
00134 }
00135 
00136 void Connection::slotConnected()
00137 {
00138     qDebug() << Q_FUNC_INFO << "We are connected to" << d->server;
00139 
00140     d->isConnected = true;
00141     emit connected();
00142 }
00143 
00144 void Connection::slotDisconnected()
00145 {
00146     qDebug() << Q_FUNC_INFO << "We got disconnected from" << d->server;
00147 
00148     d->isConnected = false;
00149     emit disconnected();
00150 }
00151 
00152 }
00153 
00154 #include "connection.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