ArtMOO
|
00001 #ifndef LISTENER_H 00002 #define LISTENER_H 00003 00004 #include "mooglobal.h" 00005 #include <QObject> 00006 #include <QTcpServer> 00007 #include <QTcpSocket> 00008 #include "connection.h" 00009 #include <QTimer> 00010 #include <QTimerEvent> 00011 #include <QMutex> 00012 00013 class ListenerSocket : public QObject 00014 { 00015 Q_OBJECT 00016 00017 public: 00018 explicit ListenerSocket( QObject *pParent, QTcpSocket *pSocket ); 00019 00020 inline ConnectionId connectionId( void ) const 00021 { 00022 return( mConnectionId ); 00023 } 00024 00025 private: 00026 void sendData( const QByteArray &pData ); 00027 void processInput( const QByteArray &pData ); 00028 void processTelnetSequence( const QByteArray &pData ); 00029 void processAnsiSequence( const QByteArray &pData ); 00030 00031 private slots: 00032 void disconnected( void ); 00033 void readyRead( void ); 00034 void textInput( const QString &pText ); 00035 void inputTimeout( void ); 00036 00037 signals: 00038 void textOutput( const QString &pText ); 00039 00040 private: 00041 ConnectionId mConnectionId; 00042 QTcpSocket *mSocket; 00043 QString mBuffer; 00044 uint8_t mLastChar; 00045 QByteArray mTelnetSequence; 00046 int mTelnetDepth; 00047 bool mDataReceived; 00048 bool mLocalEcho; 00049 bool mWebSocketActive; 00050 bool mWebSocketHeader; 00051 QString mWebSocketAccept; 00052 QByteArray mWebSocketBuffer; 00053 QTimer mTimer; 00054 int mAnsiEsc; 00055 QByteArray mAnsiSeq; 00056 int mAnsiPos; 00057 }; 00058 00059 class Listener : public QObject 00060 { 00061 Q_OBJECT 00062 00063 public: 00064 explicit Listener( ObjectId pObjectId, QObject *parent = 0 ); 00065 00066 virtual ~Listener( void ); 00067 00068 inline ObjectId objectid( void ) const 00069 { 00070 return( mObjectId ); 00071 } 00072 00073 private slots: 00074 void newConnection( void ); 00075 00076 private: 00077 ObjectId mObjectId; 00078 QTcpServer mServer; 00079 ObjectId mListeningObjectId; 00080 }; 00081 00082 #endif // LISTENER_H