1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include <QGuiApplication>
- #include <QQmlApplicationEngine>
- #include <QQmlContext>
- #include <QDebug>
- #include <QtProtobufTypes>
- #include <QGrpcHttp2Channel>
- #include <QGrpcInsecureCredentials>
- #include "snakesimulator_grpc.qpb.h"
- #include "clientwrapper.h"
- int main(int argc, char *argv[])
- {
- QGuiApplication app(argc, argv);
- QtProtobuf::qRegisterProtobufTypes();
- 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::QGrpcInsecureCallCredentials()|QtProtobuf::QGrpcInsecureChannelCredentials()));
- client->attachChannel(chan);
- ClientWrapper *wrap = new ClientWrapper(client.get());
- snakesimulator::Snake *snake = new snakesimulator::Snake;
- QPointer<snakesimulator::Field> field = new snakesimulator::Field;
- QPointer<snakesimulator::Stats> stats = new snakesimulator::Stats;
- QPointer<snakesimulator::PlayingBestState> isPlaying = new snakesimulator::PlayingBestState;
- client->subscribeFieldUpdates({}, field);
- client->subscribeStatsUpdates({}, stats);
- client->subscribeIsPlayingUpdates({}, isPlaying);
- auto subscription = client->subscribeSnakeUpdates({});
- QObject::connect(subscription, &QtProtobuf::QGrpcSubscription::updated, [subscription, snake](){
- snake->setPoints(subscription->read<snakesimulator::Snake>().points());
- });
- QQmlApplicationEngine engine;
- engine.rootContext()->setContextProperty("field", field);
- engine.rootContext()->setContextProperty("snake", snake);
- engine.rootContext()->setContextProperty("stats", stats);
- engine.rootContext()->setContextProperty("client", wrap);
- engine.rootContext()->setContextProperty("isPlaying", isPlaying);
- engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
- if (engine.rootObjects().isEmpty())
- return -1;
- return app.exec();
- }
|