blob: 726534b9415bd89bb6a0e0c5f196af2b4b3c5ada [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
Donald E Curtisa8736442015-08-05 15:48:13 -07002 * Copyright 2012 The WebRTC Project Authors. All rights reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
Donald E Curtisa8736442015-08-05 15:48:13 -07004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
jbauch70625e52015-12-09 14:18:14 -080011#ifndef WEBRTC_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_
12#define WEBRTC_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013#pragma once
14
15#include <deque>
16#include <map>
deadbeef112b2e92017-02-10 20:13:37 -080017#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000018#include <set>
19#include <string>
20
Henrik Kjellander15583c12016-02-10 10:53:12 +010021#include "webrtc/api/mediastreaminterface.h"
22#include "webrtc/api/peerconnectioninterface.h"
Donald E Curtisa8736442015-08-05 15:48:13 -070023#include "webrtc/examples/peerconnection/client/main_wnd.h"
24#include "webrtc/examples/peerconnection/client/peer_connection_client.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000025
26namespace webrtc {
27class VideoCaptureModule;
28} // namespace webrtc
29
30namespace cricket {
31class VideoRenderer;
32} // namespace cricket
33
34class Conductor
35 : public webrtc::PeerConnectionObserver,
36 public webrtc::CreateSessionDescriptionObserver,
37 public PeerConnectionClientObserver,
38 public MainWndCallback {
39 public:
40 enum CallbackID {
41 MEDIA_CHANNELS_INITIALIZED = 1,
42 PEER_CONNECTION_CLOSED,
43 SEND_MESSAGE_TO_PEER,
henrike@webrtc.org28e20752013-07-10 00:45:36 +000044 NEW_STREAM_ADDED,
45 STREAM_REMOVED,
46 };
47
48 Conductor(PeerConnectionClient* client, MainWindow* main_wnd);
49
50 bool connection_active() const;
51
52 virtual void Close();
53
54 protected:
55 ~Conductor();
56 bool InitializePeerConnection();
braveyao@webrtc.orga742cb12015-01-29 04:23:01 +000057 bool ReinitializePeerConnectionForLoopback();
58 bool CreatePeerConnection(bool dtls);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000059 void DeletePeerConnection();
60 void EnsureStreamingUI();
61 void AddStreams();
deadbeef112b2e92017-02-10 20:13:37 -080062 std::unique_ptr<cricket::VideoCapturer> OpenVideoCaptureDevice();
henrike@webrtc.org28e20752013-07-10 00:45:36 +000063
64 //
65 // PeerConnectionObserver implementation.
66 //
perkjdfb769d2016-02-09 03:09:43 -080067
68 void OnSignalingChange(
69 webrtc::PeerConnectionInterface::SignalingState new_state) override{};
Taylor Brandstetter98cde262016-05-31 13:02:21 -070070 void OnAddStream(
71 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override;
72 void OnRemoveStream(
73 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override;
74 void OnDataChannel(
75 rtc::scoped_refptr<webrtc::DataChannelInterface> channel) override {}
perkjdfb769d2016-02-09 03:09:43 -080076 void OnRenegotiationNeeded() override {}
77 void OnIceConnectionChange(
78 webrtc::PeerConnectionInterface::IceConnectionState new_state) override{};
79 void OnIceGatheringChange(
80 webrtc::PeerConnectionInterface::IceGatheringState new_state) override{};
81 void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override;
82 void OnIceConnectionReceivingChange(bool receiving) override {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000083
84 //
85 // PeerConnectionClientObserver implementation.
86 //
87
nisse63b14b72017-01-31 03:34:01 -080088 void OnSignedIn() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000089
nisse63b14b72017-01-31 03:34:01 -080090 void OnDisconnected() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000091
nisse63b14b72017-01-31 03:34:01 -080092 void OnPeerConnected(int id, const std::string& name) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000093
nisse63b14b72017-01-31 03:34:01 -080094 void OnPeerDisconnected(int id) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000095
nisse63b14b72017-01-31 03:34:01 -080096 void OnMessageFromPeer(int peer_id, const std::string& message) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000097
nisse63b14b72017-01-31 03:34:01 -080098 void OnMessageSent(int err) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000099
nisse63b14b72017-01-31 03:34:01 -0800100 void OnServerConnectionFailure() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000101
102 //
103 // MainWndCallback implementation.
104 //
105
nisse63b14b72017-01-31 03:34:01 -0800106 void StartLogin(const std::string& server, int port) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000107
nisse63b14b72017-01-31 03:34:01 -0800108 void DisconnectFromServer() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000109
nisse63b14b72017-01-31 03:34:01 -0800110 void ConnectToPeer(int peer_id) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000111
nisse63b14b72017-01-31 03:34:01 -0800112 void DisconnectFromCurrentPeer() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000113
nisse63b14b72017-01-31 03:34:01 -0800114 void UIThreadCallback(int msg_id, void* data) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000115
116 // CreateSessionDescriptionObserver implementation.
nisse63b14b72017-01-31 03:34:01 -0800117 void OnSuccess(webrtc::SessionDescriptionInterface* desc) override;
118 void OnFailure(const std::string& error) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000119
120 protected:
121 // Send a message to the remote peer.
122 void SendMessage(const std::string& json_object);
123
124 int peer_id_;
braveyao@webrtc.orga742cb12015-01-29 04:23:01 +0000125 bool loopback_;
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000126 rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
127 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000128 peer_connection_factory_;
129 PeerConnectionClient* client_;
130 MainWindow* main_wnd_;
131 std::deque<std::string*> pending_messages_;
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000132 std::map<std::string, rtc::scoped_refptr<webrtc::MediaStreamInterface> >
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000133 active_streams_;
134 std::string server_;
135};
136
jbauch70625e52015-12-09 14:18:14 -0800137#endif // WEBRTC_EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_