richlai's picture
add files
8b1e853
const API_URL = 'http://localhost:8080';
export const establishPeerConnection = async (token: string): Promise<{ pc: RTCPeerConnection, dc: RTCDataChannel }> => {
const pc = new RTCPeerConnection();
const dc = pc.createDataChannel('chat');
dc.onopen = () => console.log('Data channel open');
dc.onmessage = (event) => console.log('Received message:', event.data);
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const response = await fetch(`${API_URL}/webrtc/offer`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
sdp: pc.localDescription?.sdp,
type: pc.localDescription?.type,
}),
});
if (!response.ok) {
throw new Error('Failed to establish WebRTC connection');
}
const data = await response.json();
const remoteDesc = new RTCSessionDescription(data);
await pc.setRemoteDescription(remoteDesc);
pc.onicecandidate = async (event) => {
if (event.candidate) {
await fetch(`${API_URL}/webrtc/ice-candidate`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(event.candidate),
});
}
};
return { pc, dc };
};