main.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include <QCoreApplication>
  2. #include <iostream>
  3. #include <grpc++/grpc++.h>
  4. #include <testservice.pb.h>
  5. #include <testservice.grpc.pb.h>
  6. #include <simpletest.pb.h>
  7. #include <simpletest.grpc.pb.h>
  8. #include <thread>
  9. class SimpleTestImpl final : public qtprotobufnamespace::tests::TestService::Service {
  10. public:
  11. ::grpc::Status testMethod(grpc::ServerContext *, const qtprotobufnamespace::tests::SimpleStringMessage *request, qtprotobufnamespace::tests::SimpleStringMessage *response) override
  12. {
  13. std::cerr << "testMethod called" << std::endl << request->testfieldstring() << std::endl;
  14. response->set_testfieldstring(request->testfieldstring());
  15. if(request->testfieldstring() == "sleep") {
  16. std::this_thread::sleep_for(std::chrono::seconds(3));
  17. }
  18. return ::grpc::Status();
  19. }
  20. ::grpc::Status testMethodServerStream(grpc::ServerContext *, const qtprotobufnamespace::tests::SimpleStringMessage *request,
  21. ::grpc::ServerWriter<qtprotobufnamespace::tests::SimpleStringMessage> *writer) override
  22. {
  23. std::cerr << "testMethodServerStream called" << std::endl << request->testfieldstring() << std::endl;
  24. qtprotobufnamespace::tests::SimpleStringMessage msg;
  25. msg.set_testfieldstring(request->testfieldstring() + "1");
  26. std::this_thread::sleep_for(std::chrono::seconds(3));
  27. std::cerr << "send back " << (request->testfieldstring() + "1") << std::endl;
  28. writer->Write(msg);
  29. msg.set_testfieldstring(request->testfieldstring() + "2");
  30. std::this_thread::sleep_for(std::chrono::seconds(3));
  31. std::cerr << "send back " << (request->testfieldstring() + "2") << std::endl;
  32. writer->Write(msg);
  33. msg.set_testfieldstring(request->testfieldstring() + "3");
  34. std::this_thread::sleep_for(std::chrono::seconds(3));
  35. std::cerr << "send back " << (request->testfieldstring() + "3") << std::endl;
  36. writer->Write(msg);
  37. msg.set_testfieldstring(request->testfieldstring() + "4");
  38. std::this_thread::sleep_for(std::chrono::seconds(3));
  39. std::cerr << "send back " << (request->testfieldstring() + "4") << std::endl;
  40. writer->WriteLast(msg, grpc::WriteOptions());
  41. return ::grpc::Status();
  42. }
  43. };
  44. int main(int, char *[])
  45. {
  46. std::string server_address("localhost:50051");
  47. SimpleTestImpl service;
  48. grpc::ServerBuilder builder;
  49. builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
  50. builder.RegisterService(&service);
  51. std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
  52. std::cout << "Server listening on " << server_address << std::endl;
  53. server->Wait();
  54. }