@bcjordan/node-datachannel
Version:
libdatachannel node bindings
104 lines (94 loc) • 3.06 kB
JavaScript
// eslint-disable-next-line @typescript-eslint/no-var-requires
const nodeDataChannel = require('../lib/index');
nodeDataChannel.initLogger('Debug');
nodeDataChannel.preload();
let dc1 = null;
let dc2 = null;
// Config options
// export interface RtcConfig {
// iceServers: string[];
// proxyServer?: ProxyServer;
// bindAddress?: string;
// enableIceTcp?: boolean;
// portRangeBegin?: number;
// portRangeEnd?: number;
// maxMessageSize?: number;
// iceTransportPolicy?: TransportPolicy;
// }
//
// "iceServers" option is an array of stun/turn server urls
// Examples;
// STUN Server Example : stun:stun.l.google.com:19302
// TURN Server Example : turn:USERNAME:PASSWORD@TURN_IP_OR_ADDRESS:PORT
// TURN Server Example (TCP) : turn:USERNAME:PASSWORD@TURN_IP_OR_ADDRESS:PORT?transport=tcp
// TURN Server Example (TLS) : turns:USERNAME:PASSWORD@TURN_IP_OR_ADDRESS:PORT
let peer1 = new nodeDataChannel.PeerConnection('Peer1', { iceServers: ['stun:stun.l.google.com:19302'] });
// Set Callbacks
peer1.onStateChange((state) => {
console.log('Peer1 State:', state);
});
peer1.onGatheringStateChange((state) => {
console.log('Peer1 GatheringState:', state);
});
peer1.onLocalDescription((sdp, type) => {
console.log('Peer1 SDP:', sdp, ' Type:', type);
peer2.setRemoteDescription(sdp, type);
});
peer1.onLocalCandidate((candidate, mid) => {
console.log('Peer1 Candidate:', candidate);
peer2.addRemoteCandidate(candidate, mid);
});
let peer2 = new nodeDataChannel.PeerConnection('Peer2', { iceServers: ['stun:stun.l.google.com:19302'] });
// Set Callbacks
peer2.onStateChange((state) => {
console.log('Peer2 State:', state);
});
peer2.onGatheringStateChange((state) => {
console.log('Peer2 GatheringState:', state);
});
peer2.onLocalDescription((sdp, type) => {
console.log('Peer2 SDP:', sdp, ' Type:', type);
peer1.setRemoteDescription(sdp, type);
});
peer2.onLocalCandidate((candidate, mid) => {
console.log('Peer2 Candidate:', candidate);
peer1.addRemoteCandidate(candidate, mid);
});
peer2.onDataChannel((dc) => {
console.log('Peer2 Got DataChannel: ', dc.getLabel());
dc2 = dc;
dc2.onMessage((msg) => {
console.log('Peer2 Received Msg:', msg);
});
dc2.sendMessage('Hello From Peer2');
dc2.onClosed(() => {
console.log('dc2 closed');
});
});
// DataChannel Options
// export interface DataChannelInitConfig {
// protocol?: string;
// negotiated?: boolean;
// id?: number;
// ordered?: boolean;
// maxPacketLifeTime?: number;
// maxRetransmits?: number;
// }
dc1 = peer1.createDataChannel('test');
dc1.onOpen(() => {
dc1.sendMessage('Hello from Peer1');
// Binary message: Use sendMessageBinary(Buffer)
});
dc1.onMessage((msg) => {
console.log('Peer1 Received Msg:', msg);
});
dc1.onClosed(() => {
console.log('dc1 closed');
});
setTimeout(() => {
dc1.close();
dc2.close();
peer1.close();
peer2.close();
nodeDataChannel.cleanup();
}, 5 * 1000);