1+ #ifndef FLUTTER_WEBRTC_RTC_PEER_CONNECTION_HXX
2+ #define FLUTTER_WEBRTC_RTC_PEER_CONNECTION_HXX
3+
4+ #include " flutter_webrtc_base.h"
5+
6+ namespace flutter_webrtc_plugin {
7+
8+ using namespace flutter ;
9+
10+ class FlutterPeerConnectionObserver : public RTCPeerConnectionObserver {
11+ public:
12+ FlutterPeerConnectionObserver (FlutterWebRTCBase *base,
13+ scoped_refptr<RTCPeerConnection> peerconnection,
14+ BinaryMessenger *messenger,
15+ const std::string &channel_name);
16+
17+ virtual void OnSignalingState (RTCSignalingState state) override ;
18+ virtual void OnIceGatheringState (RTCIceGatheringState state) override ;
19+ virtual void OnIceConnectionState (RTCIceConnectionState state) override ;
20+ virtual void OnIceCandidate (
21+ scoped_refptr<RTCIceCandidate> candidate) override ;
22+ virtual void OnAddStream (scoped_refptr<RTCMediaStream> stream) override ;
23+ virtual void OnRemoveStream (scoped_refptr<RTCMediaStream> stream) override ;
24+ virtual void OnAddTrack (scoped_refptr<RTCMediaStream> stream,
25+ scoped_refptr<RTCMediaTrack> track) override ;
26+ virtual void OnRemoveTrack (scoped_refptr<RTCMediaStream> stream,
27+ scoped_refptr<RTCMediaTrack> track) override ;
28+ virtual void OnDataChannel (
29+ scoped_refptr<RTCDataChannel> data_channel) override ;
30+ virtual void OnRenegotiationNeeded () override ;
31+
32+ scoped_refptr<RTCMediaStream> MediaStreamForId (
33+ const std::string &id) {
34+ auto it = remote_streams_.find (id);
35+ if (it != remote_streams_.end ()) return (*it).second ;
36+ return nullptr ;
37+ }
38+
39+ void RemoveStreamForId (const std::string &id) {
40+ auto it = remote_streams_.find (id);
41+ if (it != remote_streams_.end ()) remote_streams_.erase (it);
42+ }
43+
44+ private:
45+ std::unique_ptr<EventChannel<EncodableValue>> event_channel_;
46+ std::unique_ptr<EventSink<EncodableValue>> event_sink_;
47+ scoped_refptr<RTCPeerConnection> peerconnection_;
48+ std::map<std::string, scoped_refptr<RTCMediaStream>> remote_streams_;
49+ FlutterWebRTCBase *base_;
50+ };
51+
52+ class FlutterPeerConnection {
53+ public:
54+ FlutterPeerConnection (FlutterWebRTCBase *base) : base_(base) {}
55+
56+ void CreateRTCPeerConnection (
57+ const EncodableMap &configuration, const EncodableMap &constraints,
58+ std::unique_ptr<MethodResult<EncodableValue>> result);
59+
60+ void RTCPeerConnectionClose (
61+ RTCPeerConnection *pc, const std::string &uuid,
62+ std::unique_ptr<MethodResult<EncodableValue>> result);
63+
64+ void CreateOffer (const EncodableMap &constraints, RTCPeerConnection *pc,
65+ std::unique_ptr<MethodResult<EncodableValue>> result);
66+
67+ void CreateAnswer (const EncodableMap &constraints, RTCPeerConnection *pc,
68+ std::unique_ptr<MethodResult<EncodableValue>> result);
69+
70+ void SetLocalDescription (
71+ RTCSessionDescription *sdp, RTCPeerConnection *pc,
72+ std::unique_ptr<MethodResult<EncodableValue>> result);
73+
74+ void SetRemoteDescription (
75+ RTCSessionDescription *sdp, RTCPeerConnection *pc,
76+ std::unique_ptr<MethodResult<EncodableValue>> result);
77+
78+ void AddIceCandidate (RTCIceCandidate *candidate, RTCPeerConnection *pc,
79+ std::unique_ptr<MethodResult<EncodableValue>> result);
80+
81+ void GetStats (const std::string &track_id, RTCPeerConnection *pc,
82+ std::unique_ptr<MethodResult<EncodableValue>> result);
83+
84+ private:
85+ FlutterWebRTCBase *base_;
86+ };
87+ } // namespace flutter_webrtc_plugin
88+
89+ #endif // !FLUTTER_WEBRTC_RTC_PEER_CONNECTION_HXX
0 commit comments