8#include "absl/strings/str_format.h"
14#include <grpcpp/grpcpp.h>
15#include "protos/canvas_automation.grpc.pb.h"
19YazeGRPCServer::YazeGRPCServer()
20 : is_running_(false) {
24YazeGRPCServer::~YazeGRPCServer() {
28absl::Status YazeGRPCServer::Initialize(
30 test::TestManager* test_manager,
32 net::RomVersionManager* version_mgr,
33 net::ProposalApprovalManager* approval_mgr,
34 CanvasAutomationServiceImpl* canvas_service) {
37 return absl::FailedPreconditionError(
"Server is already running");
43 if (config_.enable_test_harness && test_manager) {
44 test_harness_service_ =
45 std::make_unique<test::ImGuiTestHarnessServiceImpl>(test_manager);
46 std::cout <<
"✓ ImGuiTestHarness service initialized\n";
47 }
else if (config_.enable_test_harness) {
48 std::cout <<
"⚠ ImGuiTestHarness requested but no TestManager provided\n";
52 if (config_.enable_rom_service && rom) {
53 rom_service_ = std::make_unique<net::RomServiceImpl>(
54 rom, version_mgr, approval_mgr);
57 net::RomServiceImpl::Config rom_config;
58 rom_config.require_approval_for_writes = config_.require_approval_for_rom_writes;
59 rom_service_->SetConfig(rom_config);
61 std::cout <<
"✓ ROM service initialized\n";
62 }
else if (config_.enable_rom_service) {
63 std::cout <<
"⚠ ROM service requested but no ROM provided\n";
67 if (config_.enable_canvas_automation && canvas_service) {
69 canvas_service_ = std::unique_ptr<CanvasAutomationServiceImpl>(canvas_service);
70 std::cout <<
"✓ Canvas Automation service initialized\n";
71 }
else if (config_.enable_canvas_automation) {
72 std::cout <<
"⚠ Canvas Automation requested but no service provided\n";
75 if (!test_harness_service_ && !rom_service_ && !canvas_service_) {
76 return absl::InvalidArgumentError(
77 "At least one service must be enabled and initialized");
80 return absl::OkStatus();
83absl::Status YazeGRPCServer::Start() {
84 auto status = BuildServer();
89 std::cout <<
"✓ YAZE gRPC automation server listening on 0.0.0.0:" << config_.port <<
"\n";
91 if (test_harness_service_) {
92 std::cout <<
" ✓ ImGuiTestHarness available\n";
95 std::cout <<
" ✓ ROM service available\n";
97 if (canvas_service_) {
98 std::cout <<
" ✓ Canvas Automation available\n";
101 std::cout <<
"\nServer is ready to accept requests...\n";
106 return absl::OkStatus();
109absl::Status YazeGRPCServer::StartAsync() {
110 auto status = BuildServer();
115 std::cout <<
"✓ Unified gRPC server started on port " << config_.port <<
"\n";
118 return absl::OkStatus();
121void YazeGRPCServer::Shutdown() {
122 if (server_ && is_running_) {
123 std::cout <<
"⏹ Shutting down unified gRPC server...\n";
127 std::cout <<
"✓ Server stopped\n";
131bool YazeGRPCServer::IsRunning()
const {
135absl::Status YazeGRPCServer::BuildServer() {
137 return absl::FailedPreconditionError(
"Server already running");
140 std::string server_address = absl::StrFormat(
"0.0.0.0:%d", config_.port);
142 grpc::ServerBuilder builder;
145 builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
148 if (test_harness_service_) {
152 std::cout <<
" Registering ImGuiTestHarness service...\n";
157 std::cout <<
" Registering ROM service...\n";
158 builder.RegisterService(rom_service_.get());
161 if (canvas_service_) {
162 std::cout <<
" Registering Canvas Automation service...\n";
164 canvas_grpc_service_ = CreateCanvasAutomationServiceGrpc(canvas_service_.get());
165 builder.RegisterService(canvas_grpc_service_.get());
169 server_ = builder.BuildAndStart();
172 return absl::InternalError(
173 absl::StrFormat(
"Failed to start server on %s", server_address));
178 return absl::OkStatus();
Main namespace for the application.