// Copyright (c) 2013 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 P2P_SERVER_SERVICE_PUBLISHER_H_
#define P2P_SERVER_SERVICE_PUBLISHER_H_

#include <map>
#include <string>

namespace p2p {

namespace server {

// Interface for publishing information about files available from the
// local machine as well as how many clients are currently downloading.
class ServicePublisher {
 public:
  virtual ~ServicePublisher() = default;

  // Exports a file with identifier |file| and size in bytes given by
  // by |file_size|.
  virtual void AddFile(const std::string& file, size_t file_size) = 0;

  // Removes a file previoiusly exported with the AddFile() method.
  virtual void RemoveFile(const std::string& file) = 0;

  // Updates the file size of a file previously exported with the
  // AddFile() method.
  virtual void UpdateFileSize(const std::string& file, size_t file_size) = 0;

  // Set number of HTTP clients currently connected.
  virtual void SetNumConnections(int num_connections) = 0;

  // Gets the files currently exported.
  virtual std::map<std::string, size_t> files() = 0;

  // Creates and initializes a suitable ServicePublisher instance for
  // advertising files on a HTTP server running on the TCP port given
  // by |http_port|. By default no files are exported - use the
  // AddFile() method to start exporting files.
  static ServicePublisher* Construct(uint16_t http_port);
};

}  // namespace server

}  // namespace p2p

#endif  // P2P_SERVER_SERVICE_PUBLISHER_H_
