refactor: Update ROM service implementation and CMake configurations

- Adjusted paths in CMake files to reference the correct location of `rom_service.proto`.
- Refactored `RomServiceImpl` to use a namespace alias for improved readability and maintainability.
- Updated method parameters in `RomServiceImpl` to utilize the new namespace alias for consistency.
- Added a new `rom_service.proto` file to define the ROM manipulation service, enabling remote operations for reading and writing ROM data.
- Enhanced the `RecentFilesManager` to utilize a utility function for retrieving the configuration directory, improving code clarity.
- Included necessary updates in CMake configurations to integrate the new proto file and ensure proper build setup.
This commit is contained in:
scawful
2025-10-05 00:24:35 -04:00
parent eec9f84fb0
commit 91a22bffbb
7 changed files with 36 additions and 31 deletions

View File

@@ -85,7 +85,7 @@ if(YAZE_WITH_GRPC)
target_add_protobuf(yaze_core_lib target_add_protobuf(yaze_core_lib
${PROJECT_SOURCE_DIR}/src/app/core/proto/imgui_test_harness.proto) ${PROJECT_SOURCE_DIR}/src/app/core/proto/imgui_test_harness.proto)
target_add_protobuf(yaze_core_lib target_add_protobuf(yaze_core_lib
${PROJECT_SOURCE_DIR}/protos/rom_service.proto) ${PROJECT_SOURCE_DIR}/src/protos/rom_service.proto)
# Add test harness implementation # Add test harness implementation
target_sources(yaze_core_lib PRIVATE target_sources(yaze_core_lib PRIVATE

View File

@@ -1051,7 +1051,7 @@ absl::Status YazeProject::SaveToJsonFormat() {
// RecentFilesManager implementation // RecentFilesManager implementation
std::string RecentFilesManager::GetFilePath() const { std::string RecentFilesManager::GetFilePath() const {
return GetConfigDirectory() + "/" + kRecentFilesFilename; return util::GetConfigDirectory() + "/" + kRecentFilesFilename;
} }
void RecentFilesManager::Save() { void RecentFilesManager::Save() {

View File

@@ -67,7 +67,7 @@ endif()
# Add gRPC support for ROM service # Add gRPC support for ROM service
if(YAZE_WITH_GRPC) if(YAZE_WITH_GRPC)
target_add_protobuf(yaze_net ${PROJECT_SOURCE_DIR}/protos/rom_service.proto) target_add_protobuf(yaze_net ${PROJECT_SOURCE_DIR}/src/protos/rom_service.proto)
target_link_libraries(yaze_net PUBLIC target_link_libraries(yaze_net PUBLIC
grpc++ grpc++

View File

@@ -6,6 +6,9 @@
#include "app/rom.h" #include "app/rom.h"
#include "app/net/rom_version_manager.h" #include "app/net/rom_version_manager.h"
// Proto namespace alias for convenience
namespace rom_svc = ::yaze::proto;
namespace yaze { namespace yaze {
namespace app { namespace app {
namespace net { namespace net {
@@ -15,8 +18,8 @@ RomServiceImpl::RomServiceImpl(
RomVersionManager* version_manager, RomVersionManager* version_manager,
ProposalApprovalManager* approval_manager) ProposalApprovalManager* approval_manager)
: rom_(rom), : rom_(rom),
version_manager_(version_manager), version_mgr_(version_manager),
approval_manager_(approval_manager) { approval_mgr_(approval_manager) {
} }
void RomServiceImpl::SetConfig(const Config& config) { void RomServiceImpl::SetConfig(const Config& config) {
@@ -25,8 +28,8 @@ void RomServiceImpl::SetConfig(const Config& config) {
grpc::Status RomServiceImpl::ReadBytes( grpc::Status RomServiceImpl::ReadBytes(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::ReadBytesRequest* request, const rom_svc::ReadBytesRequest* request,
rom_service::ReadBytesResponse* response) { rom_svc::ReadBytesResponse* response) {
if (!rom_ || !rom_->is_loaded()) { if (!rom_ || !rom_->is_loaded()) {
return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded"); return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded");
@@ -53,8 +56,8 @@ grpc::Status RomServiceImpl::ReadBytes(
grpc::Status RomServiceImpl::WriteBytes( grpc::Status RomServiceImpl::WriteBytes(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::WriteBytesRequest* request, const rom_svc::WriteBytesRequest* request,
rom_service::WriteBytesResponse* response) { rom_svc::WriteBytesResponse* response) {
if (!rom_ || !rom_->is_loaded()) { if (!rom_ || !rom_->is_loaded()) {
return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded"); return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded");
@@ -72,7 +75,7 @@ grpc::Status RomServiceImpl::WriteBytes(
} }
// Check if approval required // Check if approval required
if (config_.require_approval_for_writes && approval_manager_) { if (config_.require_approval_for_writes && approval_mgr_) {
// Create a proposal for this write // Create a proposal for this write
std::string proposal_id = absl::StrFormat( std::string proposal_id = absl::StrFormat(
"write_0x%X_%zu_bytes", address, data.size()); "write_0x%X_%zu_bytes", address, data.size());
@@ -82,7 +85,7 @@ grpc::Status RomServiceImpl::WriteBytes(
} }
// Check if proposal is approved // Check if proposal is approved
auto status = approval_manager_->GetProposalStatus(proposal_id); auto status = approval_mgr_->GetProposalStatus(proposal_id);
if (status != ProposalApprovalManager::ApprovalStatus::kApproved) { if (status != ProposalApprovalManager::ApprovalStatus::kApproved) {
response->set_success(false); response->set_success(false);
response->set_message("Write requires approval"); response->set_message("Write requires approval");
@@ -92,10 +95,10 @@ grpc::Status RomServiceImpl::WriteBytes(
} }
// Create snapshot before write // Create snapshot before write
if (version_manager_) { if (version_mgr_) {
std::string snapshot_desc = absl::StrFormat( std::string snapshot_desc = absl::StrFormat(
"Before write to 0x%X (%zu bytes)", address, data.size()); "Before write to 0x%X (%zu bytes)", address, data.size());
auto snapshot_result = version_manager_->CreateSnapshot(snapshot_desc); auto snapshot_result = version_mgr_->CreateSnapshot(snapshot_desc);
if (snapshot_result.ok()) { if (snapshot_result.ok()) {
response->set_snapshot_id(std::to_string(snapshot_result.value())); response->set_snapshot_id(std::to_string(snapshot_result.value()));
} }
@@ -112,8 +115,8 @@ grpc::Status RomServiceImpl::WriteBytes(
grpc::Status RomServiceImpl::GetRomInfo( grpc::Status RomServiceImpl::GetRomInfo(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::GetRomInfoRequest* request, const rom_svc::GetRomInfoRequest* request,
rom_service::GetRomInfoResponse* response) { rom_svc::GetRomInfoResponse* response) {
if (!rom_ || !rom_->is_loaded()) { if (!rom_ || !rom_->is_loaded()) {
return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded"); return grpc::Status(grpc::StatusCode::FAILED_PRECONDITION, "ROM not loaded");
@@ -130,8 +133,8 @@ grpc::Status RomServiceImpl::GetRomInfo(
grpc::Status RomServiceImpl::GetTileData( grpc::Status RomServiceImpl::GetTileData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::GetTileDataRequest* request, const rom_svc::GetTileDataRequest* request,
rom_service::GetTileDataResponse* response) { rom_svc::GetTileDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"GetTileData not yet implemented"); "GetTileData not yet implemented");
@@ -139,8 +142,8 @@ grpc::Status RomServiceImpl::GetTileData(
grpc::Status RomServiceImpl::SetTileData( grpc::Status RomServiceImpl::SetTileData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::SetTileDataRequest* request, const rom_svc::SetTileDataRequest* request,
rom_service::SetTileDataResponse* response) { rom_svc::SetTileDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"SetTileData not yet implemented"); "SetTileData not yet implemented");
@@ -148,8 +151,8 @@ grpc::Status RomServiceImpl::SetTileData(
grpc::Status RomServiceImpl::GetMapData( grpc::Status RomServiceImpl::GetMapData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::GetMapDataRequest* request, const rom_svc::GetMapDataRequest* request,
rom_service::GetMapDataResponse* response) { rom_svc::GetMapDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"GetMapData not yet implemented"); "GetMapData not yet implemented");
@@ -157,8 +160,8 @@ grpc::Status RomServiceImpl::GetMapData(
grpc::Status RomServiceImpl::SetMapData( grpc::Status RomServiceImpl::SetMapData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::SetMapDataRequest* request, const rom_svc::SetMapDataRequest* request,
rom_service::SetMapDataResponse* response) { rom_svc::SetMapDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"SetMapData not yet implemented"); "SetMapData not yet implemented");
@@ -166,8 +169,8 @@ grpc::Status RomServiceImpl::SetMapData(
grpc::Status RomServiceImpl::GetSpriteData( grpc::Status RomServiceImpl::GetSpriteData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::GetSpriteDataRequest* request, const rom_svc::GetSpriteDataRequest* request,
rom_service::GetSpriteDataResponse* response) { rom_svc::GetSpriteDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"GetSpriteData not yet implemented"); "GetSpriteData not yet implemented");
@@ -175,8 +178,8 @@ grpc::Status RomServiceImpl::GetSpriteData(
grpc::Status RomServiceImpl::SetSpriteData( grpc::Status RomServiceImpl::SetSpriteData(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::SetSpriteDataRequest* request, const rom_svc::SetSpriteDataRequest* request,
rom_service::SetSpriteDataResponse* response) { rom_svc::SetSpriteDataResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"SetSpriteData not yet implemented"); "SetSpriteData not yet implemented");
@@ -184,8 +187,8 @@ grpc::Status RomServiceImpl::SetSpriteData(
grpc::Status RomServiceImpl::GetDialogue( grpc::Status RomServiceImpl::GetDialogue(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::GetDialogueRequest* request, const rom_svc::GetDialogueRequest* request,
rom_service::GetDialogueResponse* response) { rom_svc::GetDialogueResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"GetDialogue not yet implemented"); "GetDialogue not yet implemented");
@@ -193,8 +196,8 @@ grpc::Status RomServiceImpl::GetDialogue(
grpc::Status RomServiceImpl::SetDialogue( grpc::Status RomServiceImpl::SetDialogue(
grpc::ServerContext* context, grpc::ServerContext* context,
const rom_service::SetDialogueRequest* request, const rom_svc::SetDialogueRequest* request,
rom_service::SetDialogueResponse* response) { rom_svc::SetDialogueResponse* response) {
return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, return grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
"SetDialogue not yet implemented"); "SetDialogue not yet implemented");

View File

@@ -10,6 +10,7 @@
#ifdef YAZE_WITH_GRPC #ifdef YAZE_WITH_GRPC
#include <grpcpp/grpcpp.h> #include <grpcpp/grpcpp.h>
#include "protos/rom_service.grpc.pb.h" #include "protos/rom_service.grpc.pb.h"
// Note: Proto files will be generated to build directory
#endif #endif
#include "app/rom.h" #include "app/rom.h"

View File

@@ -4,6 +4,7 @@
#include "absl/strings/str_cat.h" #include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h" #include "absl/strings/str_format.h"
#include "absl/strings/str_join.h"
#include "absl/strings/str_split.h" #include "absl/strings/str_split.h"
#include "cli/service/agent/todo_manager.h" #include "cli/service/agent/todo_manager.h"