12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #include <QGuiApplication>
- #include <QQmlApplicationEngine>
- #include <QQmlContext>
- #include <QDebug>
- #include <QtProtobufTypes>
- #include "qgrpchttp2channel.h"
- #include "insecurecredentials.h"
- #include "snakesimulatorclient.h"
- #include "clientwrapper.h"
- class NoneCredencials : public QtProtobuf::CallCredentials
- {
- public:
- NoneCredencials() : QtProtobuf::CallCredentials(QtProtobuf::AbstractCredentials::CredentialMap{}) {}
- };
- int main(int argc, char *argv[])
- {
- QGuiApplication app(argc, argv);
- QtProtobuf::registerProtoTypes();
- qRegisterProtobufType<snakesimulator::Snake>();
- qRegisterProtobufType<snakesimulator::Field>();
- qRegisterProtobufType<snakesimulator::Stats>();
- qRegisterProtobufType<snakesimulator::Point>();
- qRegisterProtobufType<snakesimulator::Speed>();
- \
- qmlRegisterUncreatableType<QtProtobuf::QGrpcAsyncReply>("snakesimulator", 1, 0, "QGrpcAsyncReply", "");
- std::shared_ptr<snakesimulator::SnakeSimulatorClient> client(new snakesimulator::SnakeSimulatorClient);
- auto chan = std::shared_ptr<QtProtobuf::QGrpcHttp2Channel>(new QtProtobuf::QGrpcHttp2Channel(QUrl("http://localhost:65002"), QtProtobuf::InsecureCredentials()|NoneCredencials()));
- client->attachChannel(chan);
- ClientWrapper *wrap = new ClientWrapper(client.get());
- snakesimulator::Snake *snake = new snakesimulator::Snake;
- snakesimulator::Field *field = new snakesimulator::Field;
- snakesimulator::Stats *stats = new snakesimulator::Stats;
- QObject::connect(client.get(), &snakesimulator::SnakeSimulatorClient::fieldUpdated, [field](const snakesimulator::Field & _field){
- *field = _field;
- });
- QObject::connect(client.get(), &snakesimulator::SnakeSimulatorClient::snakeUpdated, [snake](const snakesimulator::Snake & _snake){
- *snake = _snake;
- });
- QObject::connect(client.get(), &snakesimulator::SnakeSimulatorClient::statsUpdated, [stats](const snakesimulator::Stats & _stats){
- *stats = _stats;
- });
- client->subscribeFieldUpdates({});
- client->subscribeSnakeUpdates({});
- client->subscribeStatsUpdates({});
- QQmlApplicationEngine engine;
- engine.rootContext()->setContextProperty("field", field);
- engine.rootContext()->setContextProperty("snake", snake);
- engine.rootContext()->setContextProperty("stats", stats);
- engine.rootContext()->setContextProperty("client", wrap);
- engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
- if (engine.rootObjects().isEmpty())
- return -1;
- return app.exec();
- }
|