|  | // Copyright 2014 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. | 
|  |  | 
|  | #ifndef BUFFET_COMMANDS_CLOUD_COMMAND_PROXY_H_ | 
|  | #define BUFFET_COMMANDS_CLOUD_COMMAND_PROXY_H_ | 
|  |  | 
|  | #include <bitset> | 
|  | #include <string> | 
|  |  | 
|  | #include <base/macros.h> | 
|  | #include <base/memory/weak_ptr.h> | 
|  |  | 
|  | #include "buffet/commands/command_proxy_interface.h" | 
|  |  | 
|  | namespace buffet { | 
|  |  | 
|  | class CommandInstance; | 
|  | class DeviceRegistrationInfo; | 
|  |  | 
|  | // Command proxy which publishes command updates to the cloud. | 
|  | class CloudCommandProxy final : public CommandProxyInterface { | 
|  | public: | 
|  | CloudCommandProxy(CommandInstance* command_instance, | 
|  | DeviceRegistrationInfo* device_registration_info); | 
|  | ~CloudCommandProxy() override = default; | 
|  |  | 
|  | // CommandProxyInterface implementation/overloads. | 
|  | void OnResultsChanged() override; | 
|  | void OnStatusChanged() override; | 
|  | void OnProgressChanged() override; | 
|  |  | 
|  | private: | 
|  | // Flags used to mark the command resource parts that need to be updated on | 
|  | // the server. | 
|  | using CommandUpdateFlags = std::bitset<3>; | 
|  |  | 
|  | // Sends an asynchronous request to GCD server to update the command resource. | 
|  | void SendCommandUpdate(); | 
|  |  | 
|  | // Retry last failed request. | 
|  | void ResendCommandUpdate(); | 
|  |  | 
|  | // Callback invoked by the asynchronous PATCH request to the server. | 
|  | // Called both in a case of successfully updating server command resource | 
|  | // and in case of an error, indicated by the |success| parameter. | 
|  | void OnUpdateCommandFinished(bool success); | 
|  |  | 
|  | CommandInstance* command_instance_; | 
|  | DeviceRegistrationInfo* device_registration_info_; | 
|  |  | 
|  | // Set to true while a pending PATCH request is in flight to the server. | 
|  | bool command_update_in_progress_{false}; | 
|  | // The flags indicating of new command resource updates since the last req. | 
|  | CommandUpdateFlags new_pending_command_updates_; | 
|  | // The flags indicating of command updates currently in flight. | 
|  | CommandUpdateFlags in_progress_command_updates_; | 
|  |  | 
|  | base::WeakPtrFactory<CloudCommandProxy> weak_ptr_factory_{this}; | 
|  | DISALLOW_COPY_AND_ASSIGN(CloudCommandProxy); | 
|  | }; | 
|  |  | 
|  | }  // namespace buffet | 
|  |  | 
|  | #endif  // BUFFET_COMMANDS_CLOUD_COMMAND_PROXY_H_ |