summaryrefslogtreecommitdiffstats
path: root/examples/network/remotecontrol/ipcserver.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
committerTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/network/remotecontrol/ipcserver.cpp
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'examples/network/remotecontrol/ipcserver.cpp')
-rw-r--r--examples/network/remotecontrol/ipcserver.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/examples/network/remotecontrol/ipcserver.cpp b/examples/network/remotecontrol/ipcserver.cpp
new file mode 100644
index 0000000..f83f8a2
--- /dev/null
+++ b/examples/network/remotecontrol/ipcserver.cpp
@@ -0,0 +1,84 @@
+#include "ipcserver.h"
+
+#include <qsocket.h>
+#include <qvariant.h>
+#include <qimage.h>
+#include <qpalette.h>
+#include <qapplication.h>
+
+class IpcSocket : public QSocket
+{
+ Q_OBJECT
+
+public:
+ IpcSocket( QObject *parent) : QSocket( parent )
+ {
+ packetSize = 0;
+ connect( this, SIGNAL(readyRead()), SLOT(read()) );
+ }
+
+signals:
+ void receivedText( const QString& );
+ void receivedPixmap( const QPixmap& );
+
+private slots:
+ void read()
+ {
+ Q_ULONG bytesAvail = bytesAvailable();
+ for ( ;; ) {
+ if ( packetSize == 0 ) {
+ QDataStream ds( this );
+ if ( bytesAvail < 4 )
+ return;
+ ds >> packetSize;
+ bytesAvail -= 4;
+ } else {
+ if ( bytesAvail < packetSize )
+ return;
+ // read the packet in a byte array to be sure that you don't
+ // read too much or too less
+ QByteArray ba( packetSize );
+ readBlock( ba.data(), packetSize );
+ bytesAvail -= packetSize;
+ packetSize = 0;
+
+ QVariant variant;
+ QDataStream ds( ba, IO_ReadOnly );
+ ds >> variant;
+ switch ( variant.type() ) {
+ case QVariant::String:
+ emit receivedText( variant.toString() );
+ break;
+ case QVariant::Image:
+ emit receivedPixmap( QPixmap(variant.toImage()) );
+ break;
+ case QVariant::Palette:
+ QApplication::setPalette( variant.toPalette(), TRUE );
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+private:
+ Q_UINT32 packetSize;
+};
+
+IpcServer::IpcServer( Q_UINT16 port, QObject *parent ) :
+ QServerSocket( 0x7f000001, port, 1, parent )
+{
+}
+
+void IpcServer::newConnection( int socket )
+{
+ IpcSocket *s = new IpcSocket( this );
+ s->setSocket( socket );
+ connect( s, SIGNAL(receivedText(const QString&)),
+ SIGNAL(receivedText(const QString&)) );
+ connect( s, SIGNAL(receivedPixmap(const QPixmap&)),
+ SIGNAL(receivedPixmap(const QPixmap&)) );
+}
+
+#include "ipcserver.moc"