-
-
Notifications
You must be signed in to change notification settings - Fork 64
/
Copy pathpeer-connection-wrapper.h
87 lines (72 loc) · 3.34 KB
/
peer-connection-wrapper.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef PEER_CONNECTION_WRAPPER_H
#define PEER_CONNECTION_WRAPPER_H
#include <iostream>
#include <string>
#include <variant>
#include <memory>
#include <unordered_set>
#include <napi.h>
#include <rtc/rtc.hpp>
#include "thread-safe-callback.h"
class PeerConnectionWrapper : public Napi::ObjectWrap<PeerConnectionWrapper>
{
public:
static Napi::Object Init(Napi::Env env, Napi::Object exports);
PeerConnectionWrapper(const Napi::CallbackInfo &info);
~PeerConnectionWrapper();
// Functions
void close(const Napi::CallbackInfo &info);
void setLocalDescription(const Napi::CallbackInfo &info);
void setRemoteDescription(const Napi::CallbackInfo &info);
Napi::Value localDescription(const Napi::CallbackInfo &info);
Napi::Value remoteDescription(const Napi::CallbackInfo &info);
void addRemoteCandidate(const Napi::CallbackInfo &info);
Napi::Value createDataChannel(const Napi::CallbackInfo &info);
Napi::Value addTrack(const Napi::CallbackInfo &info);
Napi::Value hasMedia(const Napi::CallbackInfo &info);
Napi::Value state(const Napi::CallbackInfo &info);
Napi::Value iceState(const Napi::CallbackInfo &info);
Napi::Value signalingState(const Napi::CallbackInfo &info);
Napi::Value gatheringState(const Napi::CallbackInfo &info);
Napi::Value remoteFingerprint(const Napi::CallbackInfo &info);
// Callbacks
void onLocalDescription(const Napi::CallbackInfo &info);
void onLocalCandidate(const Napi::CallbackInfo &info);
void onStateChange(const Napi::CallbackInfo &info);
void onIceStateChange(const Napi::CallbackInfo &info);
void onSignalingStateChange(const Napi::CallbackInfo &info);
void onGatheringStateChange(const Napi::CallbackInfo &info);
void onDataChannel(const Napi::CallbackInfo &info);
void onTrack(const Napi::CallbackInfo &info);
// Stats
Napi::Value bytesSent(const Napi::CallbackInfo &info);
Napi::Value bytesReceived(const Napi::CallbackInfo &info);
Napi::Value rtt(const Napi::CallbackInfo &info);
Napi::Value getSelectedCandidatePair(const Napi::CallbackInfo &info);
Napi::Value maxDataChannelId(const Napi::CallbackInfo &info);
Napi::Value maxMessageSize(const Napi::CallbackInfo &info);
// Close all existing Peer Connections
static void CloseAll();
// Reset all Callbacks for existing Peer Connections
static void CleanupAll();
private:
static Napi::FunctionReference constructor;
static std::unordered_set<PeerConnectionWrapper *> instances;
void doClose();
void doCleanup();
std::string mPeerName;
std::unique_ptr<rtc::PeerConnection> mRtcPeerConnPtr = nullptr;
// Callback Ptrs
std::unique_ptr<ThreadSafeCallback> mOnLocalDescriptionCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnLocalCandidateCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnStateChangeCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnIceStateChangeCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnSignalingStateChangeCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnGatheringStateChangeCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnDataChannelCallback = nullptr;
std::unique_ptr<ThreadSafeCallback> mOnTrackCallback = nullptr;
// Helpers
std::string candidateTypeToString(const rtc::Candidate::Type &type);
std::string candidateTransportTypeToString(const rtc::Candidate::TransportType &transportType);
};
#endif // PEER_CONNECTION_WRAPPER_H