| /* | 
 |  *  Copyright 2012 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_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_ | 
 | #define WEBRTC_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_ | 
 | #pragma once | 
 |  | 
 | #include <deque> | 
 | #include <map> | 
 | #include <set> | 
 | #include <string> | 
 |  | 
 | #include "talk/app/webrtc/mediastreaminterface.h" | 
 | #include "talk/app/webrtc/peerconnectioninterface.h" | 
 | #include "webrtc/examples/peerconnection/client/main_wnd.h" | 
 | #include "webrtc/examples/peerconnection/client/peer_connection_client.h" | 
 | #include "webrtc/base/scoped_ptr.h" | 
 |  | 
 | namespace webrtc { | 
 | class VideoCaptureModule; | 
 | }  // namespace webrtc | 
 |  | 
 | namespace cricket { | 
 | class VideoRenderer; | 
 | }  // namespace cricket | 
 |  | 
 | class Conductor | 
 |   : public webrtc::PeerConnectionObserver, | 
 |     public webrtc::CreateSessionDescriptionObserver, | 
 |     public PeerConnectionClientObserver, | 
 |     public MainWndCallback { | 
 |  public: | 
 |   enum CallbackID { | 
 |     MEDIA_CHANNELS_INITIALIZED = 1, | 
 |     PEER_CONNECTION_CLOSED, | 
 |     SEND_MESSAGE_TO_PEER, | 
 |     NEW_STREAM_ADDED, | 
 |     STREAM_REMOVED, | 
 |   }; | 
 |  | 
 |   Conductor(PeerConnectionClient* client, MainWindow* main_wnd); | 
 |  | 
 |   bool connection_active() const; | 
 |  | 
 |   virtual void Close(); | 
 |  | 
 |  protected: | 
 |   ~Conductor(); | 
 |   bool InitializePeerConnection(); | 
 |   bool ReinitializePeerConnectionForLoopback(); | 
 |   bool CreatePeerConnection(bool dtls); | 
 |   void DeletePeerConnection(); | 
 |   void EnsureStreamingUI(); | 
 |   void AddStreams(); | 
 |   cricket::VideoCapturer* OpenVideoCaptureDevice(); | 
 |  | 
 |   // | 
 |   // PeerConnectionObserver implementation. | 
 |   // | 
 |   virtual void OnStateChange( | 
 |       webrtc::PeerConnectionObserver::StateType state_changed) {} | 
 |   virtual void OnAddStream(webrtc::MediaStreamInterface* stream); | 
 |   virtual void OnRemoveStream(webrtc::MediaStreamInterface* stream); | 
 |   virtual void OnDataChannel(webrtc::DataChannelInterface* channel) {} | 
 |   virtual void OnRenegotiationNeeded() {} | 
 |   virtual void OnIceChange() {} | 
 |   virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate); | 
 |  | 
 |   // | 
 |   // PeerConnectionClientObserver implementation. | 
 |   // | 
 |  | 
 |   virtual void OnSignedIn(); | 
 |  | 
 |   virtual void OnDisconnected(); | 
 |  | 
 |   virtual void OnPeerConnected(int id, const std::string& name); | 
 |  | 
 |   virtual void OnPeerDisconnected(int id); | 
 |  | 
 |   virtual void OnMessageFromPeer(int peer_id, const std::string& message); | 
 |  | 
 |   virtual void OnMessageSent(int err); | 
 |  | 
 |   virtual void OnServerConnectionFailure(); | 
 |  | 
 |   // | 
 |   // MainWndCallback implementation. | 
 |   // | 
 |  | 
 |   virtual void StartLogin(const std::string& server, int port); | 
 |  | 
 |   virtual void DisconnectFromServer(); | 
 |  | 
 |   virtual void ConnectToPeer(int peer_id); | 
 |  | 
 |   virtual void DisconnectFromCurrentPeer(); | 
 |  | 
 |   virtual void UIThreadCallback(int msg_id, void* data); | 
 |  | 
 |   // CreateSessionDescriptionObserver implementation. | 
 |   virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc); | 
 |   virtual void OnFailure(const std::string& error); | 
 |  | 
 |  protected: | 
 |   // Send a message to the remote peer. | 
 |   void SendMessage(const std::string& json_object); | 
 |  | 
 |   int peer_id_; | 
 |   bool loopback_; | 
 |   rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; | 
 |   rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> | 
 |       peer_connection_factory_; | 
 |   PeerConnectionClient* client_; | 
 |   MainWindow* main_wnd_; | 
 |   std::deque<std::string*> pending_messages_; | 
 |   std::map<std::string, rtc::scoped_refptr<webrtc::MediaStreamInterface> > | 
 |       active_streams_; | 
 |   std::string server_; | 
 | }; | 
 |  | 
 | #endif  // WEBRTC_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_ |