summaryrefslogtreecommitdiff
path: root/x11
authorzecke <zecke>2002-10-16 18:24:48 (UTC)
committer zecke <zecke>2002-10-16 18:24:48 (UTC)
commit9047650faad7e64e0a36553dfe04dc7ad084f095 (patch) (side-by-side diff)
treeb79a65f224b329d6dcc559d8b72d564ccce4a3c8 /x11
parent1a305f211913ce4a4d73ed0b36a0be535c0e03ec (diff)
downloadopie-9047650faad7e64e0a36553dfe04dc7ad084f095.zip
opie-9047650faad7e64e0a36553dfe04dc7ad084f095.tar.gz
opie-9047650faad7e64e0a36553dfe04dc7ad084f095.tar.bz2
More IPC integtration
OCOPClient::self() added so we keep the connections low
Diffstat (limited to 'x11') (more/less context) (ignore whitespace changes)
-rw-r--r--x11/ipc/client/ocopclient.cpp9
-rw-r--r--x11/ipc/client/ocopclient.h7
-rw-r--r--x11/ipc/server/ocopserver.cpp27
-rw-r--r--x11/libqpe-x11/qt/qcopchannel_qws.cpp45
-rw-r--r--x11/libqpe-x11/qt/qcopchannel_qws.h4
5 files changed, 69 insertions, 23 deletions
diff --git a/x11/ipc/client/ocopclient.cpp b/x11/ipc/client/ocopclient.cpp
index c1def73..6085481 100644
--- a/x11/ipc/client/ocopclient.cpp
+++ b/x11/ipc/client/ocopclient.cpp
@@ -16,2 +16,11 @@
+OCOPClient* OCOPClient::m_self = 0;
+
+OCOPClient* OCOPClient::self() {
+ if (!m_self ) {
+ m_self = new OCOPClient();
+ }
+ return m_self;
+}
+
OCOPClient::OCOPClient( const QString& path, QObject* obj )
diff --git a/x11/ipc/client/ocopclient.h b/x11/ipc/client/ocopclient.h
index 53018a5..ee2015a 100644
--- a/x11/ipc/client/ocopclient.h
+++ b/x11/ipc/client/ocopclient.h
@@ -22,3 +22,7 @@ class OCOPClient : public QObject{
public:
-
+ /*
+ * this is the static
+ * OCopClient
+ */
+ static OCOPClient* self();
/**
@@ -58,2 +62,3 @@ private:
+ static OCOPClient* m_self;
};
diff --git a/x11/ipc/server/ocopserver.cpp b/x11/ipc/server/ocopserver.cpp
index 421e49c..4940cb8 100644
--- a/x11/ipc/server/ocopserver.cpp
+++ b/x11/ipc/server/ocopserver.cpp
@@ -216,3 +216,3 @@ void OCopServer::deregisterClient(int fd ) {
if (it != m_clients.end() ) {
- OCOPClient client = (*it);
+ OCOPClient client = it.data();
delete client.notify;
@@ -229,4 +229,5 @@ void OCopServer::deregisterClient(int fd ) {
*/
- QMap<QCString, QValueList<int> >::Iterator it;
- for ( it = m_channels.begin(); it != m_channels.end(); ++it ) {
+ QMap<QCString, QValueList<int> >::Iterator it2;
+ repeatIt:
+ for ( it2 = m_channels.begin(); it2 != m_channels.end(); ++it2 ) {
/*
@@ -234,4 +235,6 @@ void OCopServer::deregisterClient(int fd ) {
*/
- if ( it.data().contains( fd ) ) {
- QValueList<int> array = it.data();
+ qWarning("Channel %s", it2.key().data() );
+ if ( it2.data().contains( fd ) ) {
+ qWarning("contains");
+ QValueList<int> array = it2.data();
@@ -241,7 +244,17 @@ void OCopServer::deregisterClient(int fd ) {
if ( array.count() == 1 ) {
+ qWarning("Invalidate!");
/* is the list now invalidatet? */
- m_channels.remove( it );
+ m_channels.remove( it2 );
+ /* That is the first go to of my life
+ * but Iterator remove( Iterator )
+ * does not exist
+ * it2 = --it2;
+ * does not work reliable too
+ * so the only way is to reiterate :(
+ */
+ goto repeatIt;
}else{
+ qWarning("removing");
array.remove( fd );
- it = m_channels.replace( it.key(), array );
+ it2 = m_channels.replace( it2.key(), array );
}
diff --git a/x11/libqpe-x11/qt/qcopchannel_qws.cpp b/x11/libqpe-x11/qt/qcopchannel_qws.cpp
index c315d66..e90f056 100644
--- a/x11/libqpe-x11/qt/qcopchannel_qws.cpp
+++ b/x11/libqpe-x11/qt/qcopchannel_qws.cpp
@@ -5,2 +5,4 @@
+QList<QCopChannel>* QCopChannel::m_list = 0;
+
QCopChannel::QCopChannel( const QCString& channel, QObject* parent,
@@ -9,11 +11,21 @@ QCopChannel::QCopChannel( const QCString& channel, QObject* parent,
init();
+ if (!m_list ) {
+ m_list = new QList<QCopChannel>;
+ }
+ m_list->append(this);
+}
+void QCopChannel::receive( const QCString& msg, const QByteArray& ar ) {
+ emit received( msg, ar );
}
QCopChannel::~QCopChannel() {
- m_client->delChannel( m_chan );
- delete m_client;
+ m_list->remove(this);
+ if (m_list->count() == 0 ) {
+ delete m_list;
+ m_list = 0;
+ }
+ OCOPClient::self()->delChannel( m_chan );
}
void QCopChannel::init() {
- m_client = new OCOPClient(QString::null, this );
- m_client->addChannel(m_chan );
- connect(m_client, SIGNAL(called(const QCString&, const QCString&, const QByteArray& ) ),
+ OCOPClient::self()->addChannel( m_chan );
+ connect(OCOPClient::self(), SIGNAL(called(const QCString&, const QCString&, const QByteArray& ) ),
this, SLOT(rev(const QCString&, const QCString&, const QByteArray&) ) );
@@ -23,9 +35,8 @@ QCString QCopChannel::channel()const {
}
-bool QCopChannel::isRegistered( const QCString& chan) {
- OCOPClient client;
- return client.isRegistered( chan );
+bool QCopChannel::isRegistered( const QCString& chan) {;
+ return OCOPClient::self()->isRegistered( chan );
}
bool QCopChannel::send( const QCString& chan, const QCString& msg ) {
- QByteArray ar(0);
- return sendLocally(chan, msg, ar );
+ QByteArray ar;
+ return send(chan, msg, ar );
}
@@ -33,8 +44,14 @@ bool QCopChannel::send( const QCString& chan, const QCString& msg,
const QByteArray& ar ) {
- return sendLocally( chan, msg, ar );
+ OCOPClient::self()->send( chan, msg, ar );
+ return true;
}
-bool QCopChannel::sendLocally( const QCString& chan, const QCString& msg,
+bool QCopChannel::sendLocally( const QCString& chann, const QCString& msg,
const QByteArray& ar ) {
- OCOPClient client;
- client.send( chan, msg, ar );
+ if (!m_list )
+ return true;
+ QCopChannel* chan;
+ for ( chan = m_list->first(); chan; chan = m_list->next() ) {
+ if ( chan->channel() == chann )
+ chan->receive( msg, ar );
+ }
diff --git a/x11/libqpe-x11/qt/qcopchannel_qws.h b/x11/libqpe-x11/qt/qcopchannel_qws.h
index b0a6ce0..94b199e 100644
--- a/x11/libqpe-x11/qt/qcopchannel_qws.h
+++ b/x11/libqpe-x11/qt/qcopchannel_qws.h
@@ -5,2 +5,3 @@
#include <qcstring.h>
+#include <qlist.h>
@@ -22,2 +23,3 @@ public:
const QByteArray& data );
+ void receive( const QCString& msg, const QByteArray& ar );
@@ -31,3 +33,3 @@ private:
void init();
- OCOPClient* m_client;
+ static QList<QCopChannel> *m_list;
/* the channel */