ArtMOO
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
G:/dev/qt/MOO/ServerCore/listener.h
Go to the documentation of this file.
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