blob: 8a5ca749ea9f262b65f5b533ef8b70c7ff3f32c1 [file] [log] [blame]
// 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_PEER_UPDATE_MANAGER_H_
#define P2P_SERVER_PEER_UPDATE_MANAGER_H_
#include <base/macros.h>
#include "p2p/server/file_watcher.h"
#include "p2p/server/http_server.h"
#include "p2p/server/service_publisher.h"
namespace p2p {
namespace server {
// Monitors files in a directory and publishes them on the LAN.
// Also manages the life-cycle of a HTTP server for including
// publishing the current number of connections to the
// HTTP server.
class PeerUpdateManager {
public:
// Constructs an uninitialized object. The user must call Init()
// before calling any other method.
PeerUpdateManager(FileWatcher* watcher,
ServicePublisher* publisher,
HttpServer* http_server,
MetricsLibraryInterface* metrics_lib);
PeerUpdateManager(const PeerUpdateManager&) = delete;
PeerUpdateManager& operator=(const PeerUpdateManager&) = delete;
~PeerUpdateManager();
// Initializes the object.
void Init();
private:
void Publish(const base::FilePath& file);
void Update(const base::FilePath& file);
void Unpublish(const base::FilePath& file);
void OnFileWatcherChanged(const base::FilePath& file,
FileWatcher::EventType event_type);
void OnHttpServerNumConnectionsChanged(int num_connections);
// Sends a metric with the FileCount if that value was changed since the last
// time this method was called.
void UpdateFileCountMetric();
void UpdateHttpServer();
void UpdateNumConnections(int num_connections);
FileWatcher* file_watcher_;
ServicePublisher* publisher_;
HttpServer* http_server_;
MetricsLibraryInterface* metrics_lib_;
int num_connections_;
// A copy of publisher_->files().size() the last time it was reported
// to libmetrics.
int last_num_files_;
};
} // namespace server
} // namespace p2p
#endif // P2P_SERVER_PEER_UPDATE_MANAGER_H_