Index: third_party/xmpp/hangoutpubsubclient.h |
diff --git a/third_party/xmpp/hangoutpubsubclient.h b/third_party/xmpp/hangoutpubsubclient.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b2bb15e9eba1675d6929e473679f04a652539412 |
--- /dev/null |
+++ b/third_party/xmpp/hangoutpubsubclient.h |
@@ -0,0 +1,178 @@ |
+/* |
+ * Copyright 2011 The WebRTC Project Authors. All rights reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#ifndef WEBRTC_LIBJINGLE_XMPP_HANGOUTPUBSUBCLIENT_H_ |
+#define WEBRTC_LIBJINGLE_XMPP_HANGOUTPUBSUBCLIENT_H_ |
+ |
+#include <map> |
+#include <memory> |
+#include <string> |
+#include <vector> |
+ |
+#include "third_party/xmpp/jid.h" |
+#include "third_party/xmpp/pubsubclient.h" |
+#include "third_party/xmpp/pubsubstateclient.h" |
+#include "webrtc/base/sigslot.h" |
+#include "webrtc/base/sigslotrepeater.h" |
+ |
+// Gives a high-level API for MUC call PubSub needs such as |
+// presenter state, recording state, mute state, and remote mute. |
+ |
+namespace buzz { |
+ |
+class Jid; |
+class XmlElement; |
+class XmppTaskParentInterface; |
+ |
+// A client tied to a specific MUC jid and local nick. Provides ways |
+// to get updates and publish state and events. Must call |
+// RequestAll() to start getting updates. |
+class HangoutPubSubClient : public sigslot::has_slots<> { |
+ public: |
+ HangoutPubSubClient(XmppTaskParentInterface* parent, |
+ const Jid& mucjid, |
+ const std::string& nick); |
+ ~HangoutPubSubClient(); |
+ const Jid& mucjid() const { return mucjid_; } |
+ const std::string& nick() const { return nick_; } |
+ |
+ // Requests all of the different states and subscribes for updates. |
+ // Responses and updates will be signalled via the various signals. |
+ void RequestAll(); |
+ // Signal (nick, was_presenting, is_presenting) |
+ sigslot::signal3<const std::string&, bool, bool> SignalPresenterStateChange; |
+ // Signal (nick, was_muted, is_muted) |
+ sigslot::signal3<const std::string&, bool, bool> SignalAudioMuteStateChange; |
+ // Signal (nick, was_muted, is_muted) |
+ sigslot::signal3<const std::string&, bool, bool> SignalVideoMuteStateChange; |
+ // Signal (nick, was_paused, is_paused) |
+ sigslot::signal3<const std::string&, bool, bool> SignalVideoPauseStateChange; |
+ // Signal (nick, was_recording, is_recording) |
+ sigslot::signal3<const std::string&, bool, bool> SignalRecordingStateChange; |
+ // Signal (mutee_nick, muter_nick, should_mute_locally) |
+ sigslot::signal3<const std::string&, |
+ const std::string&, |
+ bool> SignalRemoteMute; |
+ // Signal (blockee_nick, blocker_nick) |
+ sigslot::signal2<const std::string&, const std::string&> SignalMediaBlock; |
+ |
+ // Signal (node, error stanza) |
+ sigslot::signal2<const std::string&, const XmlElement*> SignalRequestError; |
+ |
+ // On each of these, provide a task_id_out to get the task_id, which |
+ // can be correlated to the error and result signals. |
+ void PublishPresenterState( |
+ bool presenting, std::string* task_id_out = NULL); |
+ void PublishAudioMuteState( |
+ bool muted, std::string* task_id_out = NULL); |
+ void PublishVideoMuteState( |
+ bool muted, std::string* task_id_out = NULL); |
+ void PublishVideoPauseState( |
+ bool paused, std::string* task_id_out = NULL); |
+ void PublishRecordingState( |
+ bool recording, std::string* task_id_out = NULL); |
+ void RemoteMute( |
+ const std::string& mutee_nick, std::string* task_id_out = NULL); |
+ void BlockMedia( |
+ const std::string& blockee_nick, std::string* task_id_out = NULL); |
+ |
+ // Signal task_id |
+ sigslot::signal1<const std::string&> SignalPublishAudioMuteResult; |
+ sigslot::signal1<const std::string&> SignalPublishVideoMuteResult; |
+ sigslot::signal1<const std::string&> SignalPublishVideoPauseResult; |
+ sigslot::signal1<const std::string&> SignalPublishPresenterResult; |
+ sigslot::signal1<const std::string&> SignalPublishRecordingResult; |
+ // Signal (task_id, mutee_nick) |
+ sigslot::signal2<const std::string&, |
+ const std::string&> SignalRemoteMuteResult; |
+ // Signal (task_id, blockee_nick) |
+ sigslot::signal2<const std::string&, |
+ const std::string&> SignalMediaBlockResult; |
+ |
+ // Signal (task_id, error stanza) |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishAudioMuteError; |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishVideoMuteError; |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishVideoPauseError; |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishPresenterError; |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishRecordingError; |
+ sigslot::signal2<const std::string&, |
+ const XmlElement*> SignalPublishMediaBlockError; |
+ // Signal (task_id, mutee_nick, error stanza) |
+ sigslot::signal3<const std::string&, |
+ const std::string&, |
+ const XmlElement*> SignalRemoteMuteError; |
+ // Signal (task_id, blockee_nick, error stanza) |
+ sigslot::signal3<const std::string&, |
+ const std::string&, |
+ const XmlElement*> SignalMediaBlockError; |
+ |
+ |
+ private: |
+ void OnPresenterRequestError(PubSubClient* client, |
+ const XmlElement* stanza); |
+ void OnMediaRequestError(PubSubClient* client, |
+ const XmlElement* stanza); |
+ |
+ void OnPresenterStateChange(const PubSubStateChange<bool>& change); |
+ void OnPresenterPublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnPresenterPublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ void OnAudioMuteStateChange(const PubSubStateChange<bool>& change); |
+ void OnAudioMutePublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnAudioMutePublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ void OnVideoMuteStateChange(const PubSubStateChange<bool>& change); |
+ void OnVideoMutePublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnVideoMutePublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ void OnVideoPauseStateChange(const PubSubStateChange<bool>& change); |
+ void OnVideoPausePublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnVideoPausePublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ void OnRecordingStateChange(const PubSubStateChange<bool>& change); |
+ void OnRecordingPublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnRecordingPublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ void OnMediaBlockStateChange(const PubSubStateChange<bool>& change); |
+ void OnMediaBlockPublishResult(const std::string& task_id, |
+ const XmlElement* item); |
+ void OnMediaBlockPublishError(const std::string& task_id, |
+ const XmlElement* item, |
+ const XmlElement* stanza); |
+ Jid mucjid_; |
+ std::string nick_; |
+ std::unique_ptr<PubSubClient> media_client_; |
+ std::unique_ptr<PubSubClient> presenter_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > presenter_state_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > audio_mute_state_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > video_mute_state_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > video_pause_state_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > recording_state_client_; |
+ std::unique_ptr<PubSubStateClient<bool> > media_block_state_client_; |
+}; |
+ |
+} // namespace buzz |
+ |
+#endif // WEBRTC_LIBJINGLE_XMPP_HANGOUTPUBSUBCLIENT_H_ |