Add support for long-poll HTTP request at /privet/v3/checkForUpdates
Added state/command definition notification mechanism through a long
poll HTTP request as described in:
https://developers.google.com/cloud-devices/v1/reference/local-api/check_for_updates
BUG: 23908251
Change-Id: I5285403f35f23a310404d3324a7a255b77211264
Reviewed-on: https://weave-review.googlesource.com/1533
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/src/privet/device_delegate.cc b/src/privet/device_delegate.cc
index 78aa3c4..9a05483 100644
--- a/src/privet/device_delegate.cc
+++ b/src/privet/device_delegate.cc
@@ -5,6 +5,7 @@
#include "src/privet/device_delegate.h"
#include <base/guid.h>
+#include <weave/provider/task_runner.h>
#include "src/privet/constants.h"
@@ -15,8 +16,12 @@
class DeviceDelegateImpl : public DeviceDelegate {
public:
- DeviceDelegateImpl(uint16_t http_port, uint16_t https_port)
- : http_port_{http_port}, https_port_{https_port} {}
+ DeviceDelegateImpl(provider::TaskRunner* task_runner,
+ uint16_t http_port,
+ uint16_t https_port,
+ base::TimeDelta http_request_timeout)
+ : task_runner_{task_runner}, http_request_timeout_{http_request_timeout},
+ http_port_{http_port}, https_port_{https_port} {}
~DeviceDelegateImpl() override = default;
std::pair<uint16_t, uint16_t> GetHttpEnpoint() const override {
@@ -29,11 +34,19 @@
return base::Time::Now() - start_time_;
}
- void SetHttpPort(uint16_t port) override { http_port_ = port; }
+ base::TimeDelta GetHttpRequestTimeout() const override {
+ return http_request_timeout_;
+ }
- void SetHttpsPort(uint16_t port) override { https_port_ = port; }
+ void PostDelayedTask(const tracked_objects::Location& from_here,
+ const base::Closure& task,
+ base::TimeDelta delay) override {
+ task_runner_->PostDelayedTask(from_here, task, delay);
+ }
private:
+ provider::TaskRunner* task_runner_;
+ base::TimeDelta http_request_timeout_;
uint16_t http_port_{0};
uint16_t https_port_{0};
base::Time start_time_{base::Time::Now()};
@@ -47,10 +60,13 @@
// static
std::unique_ptr<DeviceDelegate> DeviceDelegate::CreateDefault(
+ provider::TaskRunner* task_runner,
uint16_t http_port,
- uint16_t https_port) {
+ uint16_t https_port,
+ base::TimeDelta http_request_timeout) {
return std::unique_ptr<DeviceDelegate>(
- new DeviceDelegateImpl(http_port, https_port));
+ new DeviceDelegateImpl(task_runner, http_port, https_port,
+ http_request_timeout));
}
} // namespace privet