source: trunk/examples/network/remotecontrol/ipcserver.cpp

Last change on this file was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 1.9 KB
Line 
1#include "ipcserver.h"
2
3#include <qsocket.h>
4#include <qvariant.h>
5#include <qimage.h>
6#include <qpalette.h>
7#include <qapplication.h>
8
9class IpcSocket : public QSocket
10{
11 Q_OBJECT
12
13public:
14 IpcSocket( QObject *parent) : QSocket( parent )
15 {
16 packetSize = 0;
17 connect( this, SIGNAL(readyRead()), SLOT(read()) );
18 }
19
20signals:
21 void receivedText( const QString& );
22 void receivedPixmap( const QPixmap& );
23
24private slots:
25 void read()
26 {
27 Q_ULONG bytesAvail = bytesAvailable();
28 for ( ;; ) {
29 if ( packetSize == 0 ) {
30 QDataStream ds( this );
31 if ( bytesAvail < 4 )
32 return;
33 ds >> packetSize;
34 bytesAvail -= 4;
35 } else {
36 if ( bytesAvail < packetSize )
37 return;
38 // read the packet in a byte array to be sure that you don't
39 // read too much or too less
40 QByteArray ba( packetSize );
41 readBlock( ba.data(), packetSize );
42 bytesAvail -= packetSize;
43 packetSize = 0;
44
45 QVariant variant;
46 QDataStream ds( ba, IO_ReadOnly );
47 ds >> variant;
48 switch ( variant.type() ) {
49 case QVariant::String:
50 emit receivedText( variant.toString() );
51 break;
52 case QVariant::Image:
53 emit receivedPixmap( QPixmap(variant.toImage()) );
54 break;
55 case QVariant::Palette:
56 QApplication::setPalette( variant.toPalette(), TRUE );
57 break;
58 default:
59 break;
60 }
61 }
62 }
63 }
64
65private:
66 Q_UINT32 packetSize;
67};
68
69IpcServer::IpcServer( Q_UINT16 port, QObject *parent ) :
70 QServerSocket( 0x7f000001, port, 1, parent )
71{
72}
73
74void IpcServer::newConnection( int socket )
75{
76 IpcSocket *s = new IpcSocket( this );
77 s->setSocket( socket );
78 connect( s, SIGNAL(receivedText(const QString&)),
79 SIGNAL(receivedText(const QString&)) );
80 connect( s, SIGNAL(receivedPixmap(const QPixmap&)),
81 SIGNAL(receivedPixmap(const QPixmap&)) );
82}
83
84#include "ipcserver.moc"
Note: See TracBrowser for help on using the repository browser.