mirror of https://github.com/qt/qtgrpc.git
79 lines
2.2 KiB
C++
79 lines
2.2 KiB
C++
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// Copyright (C) 2019 Alexey Edelev <semlanik@gmail.com>
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
#ifndef SIMPLECHATENGINE_H
|
|
#define SIMPLECHATENGINE_H
|
|
|
|
#include <QObject>
|
|
#include <QQmlEngine>
|
|
#include <QtTypeTraits>
|
|
|
|
#include "simplechat.qpb.h"
|
|
#include "simplechat_client.grpc.qpb.h"
|
|
#include "chatmessagemodel.h"
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QClipboard;
|
|
QT_END_NAMESPACE
|
|
|
|
class SimpleChatEngine : public QObject
|
|
{
|
|
Q_OBJECT
|
|
QML_ELEMENT
|
|
QML_SINGLETON
|
|
Q_PROPERTY(QString userName READ userName NOTIFY userNameChanged)
|
|
Q_PROPERTY(ChatMessageModel *messages READ messages CONSTANT)
|
|
Q_PROPERTY(SimpleChatEngine::ContentType clipBoardContentType READ clipBoardContentType NOTIFY
|
|
clipBoardContentTypeChanged)
|
|
Q_PROPERTY(SimpleChatEngine::State state READ state NOTIFY stateChanged)
|
|
public:
|
|
enum ContentType {
|
|
Unknown = qToUnderlying(qtgrpc::examples::chat::ChatMessage::ContentType::Unknown),
|
|
Text = qToUnderlying(qtgrpc::examples::chat::ChatMessage::ContentType::Text),
|
|
Image = qToUnderlying(qtgrpc::examples::chat::ChatMessage::ContentType::Image),
|
|
};
|
|
Q_ENUM(ContentType)
|
|
|
|
enum State {
|
|
Disconnected = 0,
|
|
Connecting = 1,
|
|
Connected = 2,
|
|
};
|
|
Q_ENUM(State)
|
|
|
|
explicit SimpleChatEngine(QObject *parent = nullptr);
|
|
~SimpleChatEngine() override;
|
|
Q_INVOKABLE void login(const QString &name, const QString &password);
|
|
Q_INVOKABLE void sendMessage(const QString &message);
|
|
|
|
Q_INVOKABLE void sendImageFromClipboard();
|
|
|
|
QString userName() const;
|
|
ChatMessageModel *messages();
|
|
SimpleChatEngine::ContentType clipBoardContentType() const;
|
|
|
|
SimpleChatEngine::State state() const;
|
|
|
|
Q_SIGNALS:
|
|
void networkError(const QString &);
|
|
void authFailed();
|
|
void clipBoardContentTypeChanged();
|
|
void userNameChanged();
|
|
void stateChanged();
|
|
|
|
private:
|
|
void setState(SimpleChatEngine::State state);
|
|
|
|
SimpleChatEngine::State m_state;
|
|
ChatMessageModel m_messages;
|
|
qtgrpc::examples::chat::SimpleChat::Client *m_client;
|
|
QClipboard *m_clipBoard;
|
|
QString m_userName;
|
|
QString m_password;
|
|
};
|
|
|
|
Q_DECLARE_METATYPE(ChatMessageModel *)
|
|
|
|
#endif // SIMPLECHATENGINE_H
|