|
|
|
@@ -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");
|
|
|
|
|