first commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#ifndef TWITCHCLIENT_H
|
||||
#define TWITCHCLIENT_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QSslSocket>
|
||||
#include <QTimer>
|
||||
#include <QByteArray>
|
||||
#include <QQueue>
|
||||
|
||||
class TwitchClient : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TwitchClient(QObject *parent = nullptr);
|
||||
~TwitchClient();
|
||||
|
||||
// Основные методы
|
||||
void connectToTwitch(const QString &oauthToken,
|
||||
const QString &nickname,
|
||||
const QString &channel);
|
||||
void sendMessage(const QString &message);
|
||||
void disconnect();
|
||||
bool isConnected() const;
|
||||
|
||||
signals:
|
||||
void newMessage(const QString &sender, const QString &channel, const QString &message);
|
||||
void systemMessage(const QString &message);
|
||||
void connected();
|
||||
void disconnected();
|
||||
void error(const QString &errorMessage);
|
||||
|
||||
private slots:
|
||||
void onConnected();
|
||||
void onReadyRead();
|
||||
void onSslErrors(const QList<QSslError> &errors);
|
||||
void onSocketError(QAbstractSocket::SocketError error);
|
||||
void onDisconnected();
|
||||
void sendQueuedData();
|
||||
void sendPing();
|
||||
|
||||
private:
|
||||
// WebSocket методы
|
||||
void sendWebSocketFrame(const QByteArray &data, quint8 opcode = 0x01);
|
||||
QByteArray createWebSocketFrame(const QByteArray &data, quint8 opcode);
|
||||
void processWebSocketFrame(const QByteArray &frame);
|
||||
|
||||
// IRC методы
|
||||
void sendIrcCommand(const QString &command, const QString ¶ms = "");
|
||||
void parseIrcMessage(const QString &message);
|
||||
|
||||
// Вспомогательные методы
|
||||
QByteArray generateWebSocketKey();
|
||||
QByteArray base64Encode(const QByteArray &data);
|
||||
QByteArray sha1Hash(const QByteArray &data);
|
||||
|
||||
private:
|
||||
QSslSocket *m_socket;
|
||||
QTimer *m_writeTimer;
|
||||
QTimer *m_pingTimer;
|
||||
QQueue<QByteArray> m_writeQueue;
|
||||
|
||||
QString m_nickname;
|
||||
QString m_channel;
|
||||
QString m_oauthToken;
|
||||
|
||||
bool m_webSocketHandshakeDone;
|
||||
bool m_ircAuthenticated;
|
||||
bool m_channelJoined;
|
||||
|
||||
QByteArray m_receiveBuffer;
|
||||
};
|
||||
|
||||
#endif // TWITCHCLIENT_H
|
||||
Reference in New Issue
Block a user