12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #include <QGuiApplication>
- #include <QQmlApplicationEngine>
- #include <QQmlContext>
- #include <QDebug>
- #include <QtProtobufTypes>
- #include "qgrpchttp2channel.h"
- #include "insecurecredentials.h"
- #include "qtprotobuf_global.pb.h"
- #include "snakesimulator_grpc.pb.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::qRegisterProtobufTypes();
- snakesimulator::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::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;
- snakesimulator::PlayingBestState *isPlaying = new snakesimulator::PlayingBestState;
- QObject::connect(client.get(), &snakesimulator::SnakeSimulatorClient::isPlayingUpdated, [isPlaying](const snakesimulator::PlayingBestState & _isPlaying){
- *isPlaying = _isPlaying;
- });
- 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({});
- client->subscribeIsPlayingUpdates({});
- 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();
- }
|