10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef PEERCONNECTION_SAMPLES_CLIENT_CONDUCTOR_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PEERCONNECTION_SAMPLES_CLIENT_CONDUCTOR_H_ 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#pragma once 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <deque> 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <map> 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <set> 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediastreaminterface.h" 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 39cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/examples/peerconnection/client/main_wnd.h" 40cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/examples/peerconnection/client/peer_connection_client.h" 412a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/scoped_ptr.h" 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VideoCaptureModule; 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VideoRenderer; 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass Conductor 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public webrtc::PeerConnectionObserver, 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::CreateSessionDescriptionObserver, 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public PeerConnectionClientObserver, 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public MainWndCallback { 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum CallbackID { 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MEDIA_CHANNELS_INITIALIZED = 1, 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PEER_CONNECTION_CLOSED, 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SEND_MESSAGE_TO_PEER, 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PEER_CONNECTION_ERROR, 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NEW_STREAM_ADDED, 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org STREAM_REMOVED, 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Conductor(PeerConnectionClient* client, MainWindow* main_wnd); 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool connection_active() const; 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Close(); 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~Conductor(); 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool InitializePeerConnection(); 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void DeletePeerConnection(); 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void EnsureStreamingUI(); 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddStreams(); 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCapturer* OpenVideoCaptureDevice(); 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // PeerConnectionObserver implementation. 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnError(); 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChange( 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::PeerConnectionObserver::StateType state_changed) {} 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnAddStream(webrtc::MediaStreamInterface* stream); 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnRemoveStream(webrtc::MediaStreamInterface* stream); 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnRenegotiationNeeded() {} 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnIceChange() {} 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate); 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // PeerConnectionClientObserver implementation. 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnSignedIn(); 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnDisconnected(); 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnPeerConnected(int id, const std::string& name); 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnPeerDisconnected(int id); 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnMessageFromPeer(int peer_id, const std::string& message); 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnMessageSent(int err); 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnServerConnectionFailure(); 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // MainWndCallback implementation. 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartLogin(const std::string& server, int port); 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DisconnectFromServer(); 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void ConnectToPeer(int peer_id); 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DisconnectFromCurrentPeer(); 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void UIThreadCallback(int msg_id, void* data); 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // CreateSessionDescriptionObserver implementation. 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc); 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnFailure(const std::string& error); 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send a message to the remote peer. 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendMessage(const std::string& json_object); 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int peer_id_; 1332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; 1342a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org peer_connection_factory_; 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PeerConnectionClient* client_; 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MainWindow* main_wnd_; 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::deque<std::string*> pending_messages_; 1392a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org std::map<std::string, rtc::scoped_refptr<webrtc::MediaStreamInterface> > 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org active_streams_; 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string server_; 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // PEERCONNECTION_SAMPLES_CLIENT_CONDUCTOR_H_ 145