C++程序  |  59行  |  1.75 KB

// Copyright 2015 The Weave 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 LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_
#define LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_

#include <memory>
#include <utility>

#include <base/callback.h>
#include <base/location.h>
#include <base/time/time.h>

namespace weave {

namespace provider {
class TaskRunner;
}

namespace privet {

// Interface to provide access to general information about device.
class DeviceDelegate {
 public:
  DeviceDelegate();
  virtual ~DeviceDelegate();

  // Returns HTTP ports for Privet. The first one is the primary port,
  // the second is the port for a pooling updates requests. The second value
  // could be 0. In this case the first port would be used for regular and for
  // updates requests.
  virtual std::pair<uint16_t, uint16_t> GetHttpEnpoint() const = 0;

  // The same |GetHttpEnpoint| but for HTTPS.
  virtual std::pair<uint16_t, uint16_t> GetHttpsEnpoint() const = 0;

  // Returns the max request timeout of http server. Returns TimeDelta::Max() if
  // no timeout is set.
  virtual base::TimeDelta GetHttpRequestTimeout() const = 0;

  // Schedules a background task on the embedded TaskRunner.
  virtual void PostDelayedTask(const tracked_objects::Location& from_here,
                               const base::Closure& task,
                               base::TimeDelta delay) = 0;

  // Create default instance.
  static std::unique_ptr<DeviceDelegate> CreateDefault(
      provider::TaskRunner* task_runner,
      uint16_t http_port,
      uint16_t https_port,
      base::TimeDelta http_request_timeout);
};

}  // namespace privet
}  // namespace weave

#endif  // LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_