#ifndef PTSOCKET_H #define PTSOCKET_H #include "libptsocket_global.h" #include #include #include #include class LIBPTSOCKETSHARED_EXPORT PTSocket : public QTcpSocket { Q_OBJECT public: enum State { Disconnected, HostLookUp, Connecting, Connected, Handshaked, Disconnecting, Error }; PTSocket(QObject* p); int getTimeout() const; int getPingInterval() const; bool isServerSide() const; static QByteArray handshakeData(); static QByteArray intToByteArray(int a); static int byteArrayToInt(QByteArray d); signals: void stateChanged(PTSocket::State); void packetReceived(int, QByteArray); public slots: void setTimeout(int t); void setPingInterval(int p); void setIsServerSide(bool s); void send(int pktType, QByteArray data); private slots: void m_ping(); void m_readyRead(); void m_timedout(); void m_handshakeError(); void m_stateChanged(QAbstractSocket::SocketState s); void m_socketError(QAbstractSocket::SocketError); void setState(State s); void setError(QString e); void send(bool sys, int pktType, QByteArray data = ""); private: QTimer m_timeoutTimer; QTimer m_pingTimer; int m_timeout; int m_pingInterval; State m_state; bool m_isServerSide; unsigned int m_packetSize; enum PacketType { PingRequest = 1, PingAnswer = 2 }; }; #endif // PTSOCKET_H