blob: acc5a3a687d01cb8830fa28c5b11508c4b02bcaa [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "diagnostics/wilco_dtc_supportd/mojo_grpc_adapter.h"
#include <memory>
#include <base/bind.h>
#include <base/logging.h>
#include <base/strings/string_piece.h>
#include "diagnostics/wilco_dtc_supportd/grpc_client_manager.h"
#include "diagnostics/wilco_dtc_supportd/json_utils.h"
#include "wilco_dtc.grpc.pb.h" // NOLINT(build/include)
namespace diagnostics {
MojoGrpcAdapter::MojoGrpcAdapter(GrpcClientManager* grpc_client_manager)
: grpc_client_manager_(grpc_client_manager) {}
MojoGrpcAdapter::~MojoGrpcAdapter() = default;
void MojoGrpcAdapter::SendGrpcUiMessageToWilcoDtc(
base::StringPiece json_message,
const SendGrpcUiMessageToWilcoDtcCallback& callback) {
VLOG(1) << "Core::SendGrpcMessageToWilcoDtc";
if (!grpc_client_manager_->GetUiClient()) {
VLOG(1) << "The UI message is discarded since the recipient has been shut "
<< "down.";
callback.Run(std::string() /* response_json_message */);
return;
}
grpc_api::HandleMessageFromUiRequest request;
request.set_json_message(json_message.data() ? json_message.data() : "",
json_message.length());
grpc_client_manager_->GetUiClient()->CallRpc(
&grpc_api::WilcoDtc::Stub::AsyncHandleMessageFromUi, request,
base::Bind(
[](const SendGrpcUiMessageToWilcoDtcCallback& callback,
grpc::Status status,
std::unique_ptr<grpc_api::HandleMessageFromUiResponse> response) {
if (!status.ok()) {
VLOG(1) << "Failed to call HandleMessageFromUiRequest gRPC method"
" on wilco_dtc. grpc error code: "
<< status.error_code()
<< ", error message: " << status.error_message();
callback.Run(std::string() /* response_json_message */);
return;
}
VLOG(1) << "gRPC method HandleMessageFromUiRequest was "
"successfully called on wilco_dtc";
std::string json_error_message;
if (!IsJsonValid(
base::StringPiece(response->response_json_message()),
&json_error_message)) {
LOG(ERROR) << "Invalid JSON error: " << json_error_message;
callback.Run(std::string() /* response_json_message */);
return;
}
callback.Run(response->response_json_message());
},
callback));
}
void MojoGrpcAdapter::NotifyConfigurationDataChangedToWilcoDtc() {
VLOG(1) << "Core::NotifyConfigurationDataChanged";
grpc_api::HandleConfigurationDataChangedRequest request;
for (auto& client : grpc_client_manager_->GetClients()) {
client->CallRpc(
&grpc_api::WilcoDtc::Stub::AsyncHandleConfigurationDataChanged, request,
base::Bind(
[](grpc::Status status,
std::unique_ptr<grpc_api::HandleConfigurationDataChangedResponse>
response) {
if (!status.ok()) {
VLOG(1) << "Failed to call HandleConfigurationDataChanged gRPC "
"method on wilco_dtc. grpc error code: "
<< status.error_code()
<< ", error message: " << status.error_message();
return;
}
VLOG(1) << "gRPC method HandleConfigurationDaraChanged was "
"successfully called on wilco_dtc";
}));
}
}
} // namespace diagnostics