Logo Search packages:      
Sourcecode: chromium-browser version File versions  Download package

auto_reconnect.h

// Copyright (c) 2009 The Chromium 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 CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_AUTO_RECONNECT_H_
#define CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_AUTO_RECONNECT_H_

#include <string>

#include "chrome/browser/sync/notifier/base/time.h"
#include "chrome/browser/sync/notifier/communicator/login.h"
#include "talk/base/sigslot.h"

namespace talk_base {
class Task;
}

namespace notifier {

class NetworkStatusDetectorTask;
class Timer;

class AutoReconnect : public sigslot::has_slots<> {
 public:
  AutoReconnect(talk_base::Task* parent,
                NetworkStatusDetectorTask* network_status);
  void StartReconnectTimer();
  void StopReconnectTimer();
  void OnClientStateChange(Login::ConnectionState state);

  // Callback when power is suspended.
  void OnPowerSuspend(bool suspended);

  void set_idle(bool idle) {
    is_idle_ = idle;
  }

  // Returns true if the auto-retry is to be done (pending a countdown).
  bool is_retrying() const {
    return reconnect_timer_ != NULL;
  }

  int seconds_until() const;
  sigslot::signal0<> SignalTimerStartStop;
  sigslot::signal0<> SignalStartConnection;

 private:
  void StartReconnectTimerWithInterval(time64 interval_ns);
  void DoReconnect();
  void ResetState();
  void SetupReconnectInterval();
  void StopDelayedResetTimer();

  void OnNetworkStateDetected(bool was_alive, bool is_alive);

  time64 reconnect_interval_ns_;
  Timer* reconnect_timer_;
  Timer* delayed_reset_timer_;
  talk_base::Task* parent_;

  bool is_idle_;
  DISALLOW_COPY_AND_ASSIGN(AutoReconnect);
};

// Wait 2 seconds until after we actually connect to reset reconnect related
// items.
//
// The reason for this delay is to avoid the situation in which buzz is trying
// to block the client due to abuse and the client responses by going into
// rapid reconnect mode, which makes the problem more severe.
extern const int kResetReconnectInfoDelaySec;

}  // namespace notifier

#endif  // CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_AUTO_RECONNECT_H_

Generated by  Doxygen 1.6.0   Back to index