mirror of
https://github.com/MercuryWorkshop/adrift.git
synced 2025-05-13 22:30:02 -04:00
92 lines
2.8 KiB
TypeScript
92 lines
2.8 KiB
TypeScript
import dotenv from "dotenv";
|
|
import * as wrtc from "wrtc";
|
|
|
|
const configuration = {
|
|
iceServers: [
|
|
{
|
|
urls: "stun:stun.l.google.com:19302",
|
|
},
|
|
],
|
|
};
|
|
dotenv.config();
|
|
|
|
async function connect(offer, candidates) {
|
|
const localCandidates: any[] = [];
|
|
let dataChannel;
|
|
const peer = new wrtc.RTCPeerConnection(configuration);
|
|
peer.ondatachannel = (event) => {
|
|
dataChannel = event.channel;
|
|
dataChannel.onopen = () => {
|
|
console.log("opened");
|
|
};
|
|
dataChannel.onclose = (event) => {
|
|
console.log("closed");
|
|
};
|
|
dataChannel.onmessage = (event) => {
|
|
console.log("messaged");
|
|
console.log(event);
|
|
};
|
|
};
|
|
peer.onconnectionstatechange = () => {
|
|
console.log("Connection state:", peer.connectionState);
|
|
};
|
|
peer.onsignalingstatechange = () => {
|
|
console.log("Signaling state:", peer.signalingState);
|
|
};
|
|
peer.oniceconnectionstatechange = () => {
|
|
console.log("ICE connection state:", peer.iceConnectionState);
|
|
};
|
|
peer.onicegatheringstatechange = () => {
|
|
console.log("ICE gathering state:", peer.iceGatheringState);
|
|
};
|
|
peer.onicecandidate = (event: any) => {
|
|
console.log("onicecandidate");
|
|
if (event.candidate) {
|
|
localCandidates.push(event.candidate);
|
|
return;
|
|
}
|
|
let payload = {
|
|
answer: peer.localDescription,
|
|
candidates: localCandidates,
|
|
};
|
|
let string = JSON.stringify(payload);
|
|
console.log(string);
|
|
};
|
|
await peer.setRemoteDescription(offer);
|
|
let answer = await peer.createAnswer();
|
|
await peer.setLocalDescription(answer);
|
|
for (let candidate of candidates) {
|
|
if (!candidate.candidate) continue;
|
|
console.log({ candidate });
|
|
await peer.addIceCandidate(candidate);
|
|
}
|
|
}
|
|
|
|
function addPeer(data) {
|
|
if (data && data.offer && data.localCandidates) {
|
|
const { offer, localCandidates } = data;
|
|
connect(offer, localCandidates);
|
|
}
|
|
}
|
|
|
|
addPeer({
|
|
offer: {
|
|
type: "offer",
|
|
sdp: "v=0\r\no=mozilla...THIS_IS_SDPARTA-99.0 1516055380756088130 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\na=fingerprint:sha-256 A1:67:6E:32:56:AC:94:67:35:BF:55:F9:A5:53:F7:73:42:82:9F:85:80:F6:CA:FB:2E:97:52:04:42:2C:9E:E2\r\na=group:BUNDLE 0\r\na=ice-options:trickle\r\na=msid-semantic:WMS *\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=sendrecv\r\na=ice-pwd:4e784021c6dce7679ceb6493b1fcaa15\r\na=ice-ufrag:8e234e4a\r\na=mid:0\r\na=setup:actpass\r\na=sctp-port:5000\r\na=max-message-size:1073741823\r\n",
|
|
},
|
|
localCandidates: [
|
|
{
|
|
candidate:
|
|
"candidate:1 1 UDP 1686052863 64.98.208.26 44197 typ srflx raddr 0.0.0.0 rport 0",
|
|
sdpMid: "0",
|
|
sdpMLineIndex: 0,
|
|
usernameFragment: "8e234e4a",
|
|
},
|
|
{
|
|
candidate: "",
|
|
sdpMid: "0",
|
|
sdpMLineIndex: 0,
|
|
usernameFragment: "8e234e4a",
|
|
},
|
|
],
|
|
});
|