Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

qcopchannel_qws.cpp

Go to the documentation of this file.
00001 
00002 #include "../../ipc/client/ocopclient.h"
00003 
00004 #include <qcopchannel_qws.h>
00005 
00006 QList<QCopChannel>* QCopChannel::m_list = 0;
00007 QMap<QCString, int> QCopChannel::m_refCount;
00008 
00009 QCopChannel::QCopChannel( const QCString& channel, QObject* parent,
00010                           const char* name )
00011     : QObject( parent, name ),m_chan(channel) {
00012     if (!m_list ) {
00013         m_list = new QList<QCopChannel>;
00014         /* only connect once */
00015         connect(OCOPClient::self(), SIGNAL(called(const QCString&,const QCString&,const QByteArray&) ),
00016                 this, SLOT(rev(const QCString&,const QCString&,const QByteArray&) ) );
00017     }
00018     /* first registration  or ref count is 0 for m_chan*/
00019     if (!m_refCount.contains( m_chan ) || !m_refCount[m_chan]  ) {
00020         qWarning("adding channel %s", m_chan.data() );
00021         m_refCount[m_chan] = 1;
00022         OCOPClient::self()->addChannel( m_chan );
00023     }else{
00024         qWarning("reffing up for %s %d", m_chan.data(), m_refCount[m_chan] );
00025         m_refCount[m_chan]++;
00026     }
00027 
00028     m_list->append(this);
00029 }
00030 void QCopChannel::receive( const QCString& msg, const QByteArray& ar ) {
00031     emit received( msg, ar );
00032 }
00033 QCopChannel::~QCopChannel() {
00034     if (m_refCount[m_chan] == 1 ) {
00035         OCOPClient::self()->delChannel( m_chan );
00036         m_refCount[m_chan] = 0;
00037     }else
00038         m_refCount[m_chan]--;
00039 
00040 
00041     m_list->remove(this);
00042     if (m_list->count() == 0 ) {
00043         delete m_list;
00044         m_list = 0;
00045     }
00046 
00047 }
00048 QCString QCopChannel::channel()const {
00049     return m_chan;
00050 }
00051 bool QCopChannel::isRegistered( const QCString& chan) {
00052     if (m_refCount.contains(chan) ) {
00053             qDebug("Client:locally contains");
00054             return true;
00055     }
00056     return OCOPClient::self()->isRegistered( chan );
00057 }
00058 bool QCopChannel::send( const QCString& chan, const QCString& msg ) {
00059     QByteArray ar;
00060     return send(chan, msg, ar );
00061 }
00062 bool QCopChannel::send( const QCString& chan, const QCString& msg,
00063                      const QByteArray& ar ) {
00064     OCOPClient::self()->send( chan, msg, ar );
00065     return true;
00066 }
00067 bool QCopChannel::sendLocally( const QCString& chann, const QCString& msg,
00068                                const QByteArray& ar ) {
00069     qWarning("Client:sendLocally %s %s", chann.data(), msg.data() );
00070     if (!m_list )
00071         return true;
00072     QCopChannel* chan;
00073 
00074     for ( chan = m_list->first(); chan; chan = m_list->next() ) {
00075         if ( chan->channel() == chann )
00076             chan->receive( msg, ar );
00077     }
00078 
00079     return true;
00080 }
00081 void QCopChannel::rev( const QCString& chan, const QCString& msg, const QByteArray& ar ) {
00082     sendLocally( chan, msg, ar );
00083 }

Generated on Sat Nov 5 16:18:35 2005 for OPIE by  doxygen 1.4.2