node-datachannel
Version:
WebRTC For Node.js and Electron. libdatachannel node bindings.
87 lines (71 loc) • 3.36 kB
Plain Text
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);
// 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);
};