qtgrpc/examples/grpc/chat/client/simplechatengine.h

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