ipcserver.cpp
上传用户:yayahi0755
上传日期:2022-05-14
资源大小:876k
文件大小:2k
源码类别:

浏览器

开发平台:

Unix_Linux

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