1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef REMOTING_CLIENT_PLUGIN_DELEGATING_SIGNAL_STRATEGY_H_
6#define REMOTING_CLIENT_PLUGIN_DELEGATING_SIGNAL_STRATEGY_H_
7
8#include "base/callback.h"
9#include "base/observer_list.h"
10#include "remoting/signaling/signal_strategy.h"
11
12namespace base {
13class SingleThreadTaskRunner;
14}  // namespace base
15
16namespace remoting {
17
18class DelegatingSignalStrategy : public SignalStrategy {
19 public:
20  typedef base::Callback<void(const std::string&)> SendIqCallback;
21
22  DelegatingSignalStrategy(std::string local_jid,
23                       const SendIqCallback& send_iq_callback);
24  virtual ~DelegatingSignalStrategy();
25
26  void OnIncomingMessage(const std::string& message);
27
28  // SignalStrategy interface.
29  virtual void Connect() OVERRIDE;
30  virtual void Disconnect() OVERRIDE;
31  virtual State GetState() const OVERRIDE;
32  virtual Error GetError() const OVERRIDE;
33  virtual std::string GetLocalJid() const OVERRIDE;
34  virtual void AddListener(Listener* listener) OVERRIDE;
35  virtual void RemoveListener(Listener* listener) OVERRIDE;
36  virtual bool SendStanza(scoped_ptr<buzz::XmlElement> stanza) OVERRIDE;
37  virtual std::string GetNextId() OVERRIDE;
38
39 private:
40  std::string local_jid_;
41  SendIqCallback send_iq_callback_;
42
43  ObserverList<Listener> listeners_;
44
45  DISALLOW_COPY_AND_ASSIGN(DelegatingSignalStrategy);
46};
47
48}  // namespace remoting
49
50#endif  // REMOTING_CLIENT_PLUGIN_DELEGATING_SIGNAL_STRATEGY_H_
51