blob: 80617d3cf484810951a3cdb261e99f0d6a0902ed [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:361/*
Donald E Curtisa8736442015-08-05 22:48:132 * Copyright 2012 The WebRTC Project Authors. All rights reserved.
henrike@webrtc.org28e20752013-07-10 00:45:363 *
Donald E Curtisa8736442015-08-05 22:48:134 * 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:369 */
10
Mirko Bonadei92ea95e2017-09-15 04:47:3111#ifndef EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_
12#define EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_
henrike@webrtc.org28e20752013-07-10 00:45:3613
14#include <deque>
15#include <map>
deadbeef112b2e92017-02-11 04:13:3716#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:3617#include <string>
Steve Antonc06ed702018-04-17 19:53:0218#include <vector>
henrike@webrtc.org28e20752013-07-10 00:45:3619
Steve Anton10542f22019-01-11 17:11:0020#include "api/media_stream_interface.h"
21#include "api/peer_connection_interface.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3122#include "examples/peerconnection/client/main_wnd.h"
23#include "examples/peerconnection/client/peer_connection_client.h"
Qiu Jianlina3d8c612021-09-14 04:15:0424#include "rtc_base/thread.h"
henrike@webrtc.org28e20752013-07-10 00:45:3625
26namespace webrtc {
27class VideoCaptureModule;
28} // namespace webrtc
29
30namespace cricket {
31class VideoRenderer;
32} // namespace cricket
33
Yves Gerey665174f2018-06-19 13:03:0534class Conductor : public webrtc::PeerConnectionObserver,
35 public webrtc::CreateSessionDescriptionObserver,
36 public PeerConnectionClientObserver,
37 public MainWndCallback {
henrike@webrtc.org28e20752013-07-10 00:45:3638 public:
39 enum CallbackID {
40 MEDIA_CHANNELS_INITIALIZED = 1,
41 PEER_CONNECTION_CLOSED,
42 SEND_MESSAGE_TO_PEER,
Steve Antonc06ed702018-04-17 19:53:0243 NEW_TRACK_ADDED,
44 TRACK_REMOVED,
henrike@webrtc.org28e20752013-07-10 00:45:3645 };
46
47 Conductor(PeerConnectionClient* client, MainWindow* main_wnd);
48
49 bool connection_active() const;
50
Patrik Höglunda4251842018-02-20 15:03:4151 void Close() override;
henrike@webrtc.org28e20752013-07-10 00:45:3652
53 protected:
54 ~Conductor();
55 bool InitializePeerConnection();
braveyao@webrtc.orga742cb12015-01-29 04:23:0156 bool ReinitializePeerConnectionForLoopback();
Harald Alvestrandf9e502d2021-10-13 15:26:2657 bool CreatePeerConnection();
henrike@webrtc.org28e20752013-07-10 00:45:3658 void DeletePeerConnection();
59 void EnsureStreamingUI();
Steve Antonc06ed702018-04-17 19:53:0260 void AddTracks();
henrike@webrtc.org28e20752013-07-10 00:45:3661
62 //
63 // PeerConnectionObserver implementation.
64 //
perkjdfb769d2016-02-09 11:09:4365
66 void OnSignalingChange(
Mirko Bonadeic4dd7302019-02-25 08:12:0267 webrtc::PeerConnectionInterface::SignalingState new_state) override {}
Steve Antonc06ed702018-04-17 19:53:0268 void OnAddTrack(
69 rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver,
70 const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>>&
71 streams) override;
72 void OnRemoveTrack(
73 rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver) override;
Taylor Brandstetter98cde262016-05-31 20:02:2174 void OnDataChannel(
75 rtc::scoped_refptr<webrtc::DataChannelInterface> channel) override {}
perkjdfb769d2016-02-09 11:09:4376 void OnRenegotiationNeeded() override {}
77 void OnIceConnectionChange(
Mirko Bonadeic4dd7302019-02-25 08:12:0278 webrtc::PeerConnectionInterface::IceConnectionState new_state) override {}
perkjdfb769d2016-02-09 11:09:4379 void OnIceGatheringChange(
Mirko Bonadeic4dd7302019-02-25 08:12:0280 webrtc::PeerConnectionInterface::IceGatheringState new_state) override {}
perkjdfb769d2016-02-09 11:09:4381 void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override;
82 void OnIceConnectionReceivingChange(bool receiving) override {}
henrike@webrtc.org28e20752013-07-10 00:45:3683
84 //
85 // PeerConnectionClientObserver implementation.
86 //
87
nisse63b14b72017-01-31 11:34:0188 void OnSignedIn() override;
henrike@webrtc.org28e20752013-07-10 00:45:3689
nisse63b14b72017-01-31 11:34:0190 void OnDisconnected() override;
henrike@webrtc.org28e20752013-07-10 00:45:3691
nisse63b14b72017-01-31 11:34:0192 void OnPeerConnected(int id, const std::string& name) override;
henrike@webrtc.org28e20752013-07-10 00:45:3693
nisse63b14b72017-01-31 11:34:0194 void OnPeerDisconnected(int id) override;
henrike@webrtc.org28e20752013-07-10 00:45:3695
nisse63b14b72017-01-31 11:34:0196 void OnMessageFromPeer(int peer_id, const std::string& message) override;
henrike@webrtc.org28e20752013-07-10 00:45:3697
nisse63b14b72017-01-31 11:34:0198 void OnMessageSent(int err) override;
henrike@webrtc.org28e20752013-07-10 00:45:3699
nisse63b14b72017-01-31 11:34:01100 void OnServerConnectionFailure() override;
henrike@webrtc.org28e20752013-07-10 00:45:36101
102 //
103 // MainWndCallback implementation.
104 //
105
nisse63b14b72017-01-31 11:34:01106 void StartLogin(const std::string& server, int port) override;
henrike@webrtc.org28e20752013-07-10 00:45:36107
nisse63b14b72017-01-31 11:34:01108 void DisconnectFromServer() override;
henrike@webrtc.org28e20752013-07-10 00:45:36109
nisse63b14b72017-01-31 11:34:01110 void ConnectToPeer(int peer_id) override;
henrike@webrtc.org28e20752013-07-10 00:45:36111
nisse63b14b72017-01-31 11:34:01112 void DisconnectFromCurrentPeer() override;
henrike@webrtc.org28e20752013-07-10 00:45:36113
nisse63b14b72017-01-31 11:34:01114 void UIThreadCallback(int msg_id, void* data) override;
henrike@webrtc.org28e20752013-07-10 00:45:36115
116 // CreateSessionDescriptionObserver implementation.
nisse63b14b72017-01-31 11:34:01117 void OnSuccess(webrtc::SessionDescriptionInterface* desc) override;
Harald Alvestrand73771a82018-05-24 08:53:49118 void OnFailure(webrtc::RTCError error) override;
henrike@webrtc.org28e20752013-07-10 00:45:36119
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:01125 bool loopback_;
Qiu Jianlina3d8c612021-09-14 04:15:04126 std::unique_ptr<rtc::Thread> signaling_thread_;
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52127 rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
128 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
henrike@webrtc.org28e20752013-07-10 00:45:36129 peer_connection_factory_;
130 PeerConnectionClient* client_;
131 MainWindow* main_wnd_;
132 std::deque<std::string*> pending_messages_;
henrike@webrtc.org28e20752013-07-10 00:45:36133 std::string server_;
134};
135
Mirko Bonadei92ea95e2017-09-15 04:47:31136#endif // EXAMPLES_PEERCONNECTION_CLIENT_CONDUCTOR_H_