It's still broken, but I made a bit of progress.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
let peerConnection = null;
|
||||
let peerConnection = null;
|
||||
let localStream = null;
|
||||
let currentUsername = null;
|
||||
let currentChannelId = null;
|
||||
@@ -26,6 +26,30 @@ window.setChannelId = function(channelId) {
|
||||
LogMessage("Channel set to: " + currentChannelId);
|
||||
};
|
||||
|
||||
//window.AnswerCallback = async function(answer) {
|
||||
// try {
|
||||
// LogMessage("AnswerCallback called with: " + JSON.stringify(answer));
|
||||
//
|
||||
// if (!peerConnection) {
|
||||
// await ensurePeerConnection2();
|
||||
// }
|
||||
//
|
||||
// if (!answer || !answer.type || !answer.sdp) {
|
||||
// LogMessage("AnswerCallback received invalid answer");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// await peerConnection.setRemoteDescription({
|
||||
// type: answer.type,
|
||||
// sdp: answer.sdp
|
||||
// });
|
||||
//
|
||||
// LogMessage("Remote answer applied");
|
||||
// } catch (err) {
|
||||
// LogMessage("AnswerCallback failed: " + err);
|
||||
// }
|
||||
//};
|
||||
|
||||
function LogMessage(msg) {
|
||||
const messageLog = document.getElementById("messageLog");
|
||||
messageLog.value += '\r\n' + msg;
|
||||
@@ -218,16 +242,21 @@ async function ensurePeerConnection2()
|
||||
`ICE connection state change: ${peerConnection.iceConnectionState}`);
|
||||
});
|
||||
}
|
||||
|
||||
async function channelCallJoin(activeCall)
|
||||
{
|
||||
LogMessage("Active call: " + activeCall);
|
||||
|
||||
await ensurePeerConnection2();
|
||||
|
||||
await ensureLocalMedia();
|
||||
|
||||
if (activeCall)
|
||||
{
|
||||
const rawJson = await window.HybridWebView.InvokeDotNet("GetRtcOffer");
|
||||
const offer = typeof rawJson === "string" ? JSON.parse(rawJson) : rawJson;
|
||||
|
||||
await peerConnection.setRemoteDescription(offer);
|
||||
|
||||
const answer = await peerConnection.createAnswer();
|
||||
await peerConnection.setLocalDescription(answer);
|
||||
|
||||
@@ -241,21 +270,9 @@ async function channelCallJoin(activeCall)
|
||||
{
|
||||
const offer = await peerConnection.createOffer();
|
||||
await peerConnection.setLocalDescription(offer);
|
||||
|
||||
|
||||
await window.HybridWebView.InvokeDotNet("WriteRtcOffer", [JSON.stringify(offer)]);
|
||||
LogMessage(`Joining call with media offer: ${JSON.stringify(offer)}`);
|
||||
|
||||
localStream.getTracks().forEach(track => {
|
||||
peerConnection.addTrack(track, localStream);
|
||||
});
|
||||
|
||||
peerConnection.addEventListener('track', event => {
|
||||
LogMessage("Received track: " + event.streams[0]);
|
||||
event.streams[0].getTracks().forEach(track => {
|
||||
LogMessage(`Add a track to the remoteStream: ${track}`);
|
||||
remoteStream.addTrack(track);
|
||||
});
|
||||
});
|
||||
LogMessage("Joining call with media offer: " + JSON.stringify(offer));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,20 +280,20 @@ async function CSharpCallTest(value)
|
||||
{
|
||||
LogMessage("Called from C#: " + value);
|
||||
}
|
||||
async function AnswerCallback(answer)
|
||||
{
|
||||
LogMessage("Answer: " + answer);
|
||||
|
||||
let callBack = JSON.parse(answer);
|
||||
LogMessage("Call Back: " + callBack);
|
||||
|
||||
if (!peerConnection.currentRemoteDescription && callBack)
|
||||
{
|
||||
LogMessage("Current answer: " + callBack);
|
||||
const desc = new RTCSessionDescription(answer);
|
||||
await peerConnection.setRemoteDescription(desc);
|
||||
}
|
||||
}
|
||||
//async function AnswerCallback(answer)
|
||||
//{
|
||||
// LogMessage("Answer: " + answer);
|
||||
//
|
||||
// let callBack = JSON.parse(answer);
|
||||
// LogMessage("Call Back: " + callBack);
|
||||
//
|
||||
// if (!peerConnection.currentRemoteDescription && callBack)
|
||||
// {
|
||||
// LogMessage("Current answer: " + callBack);
|
||||
// const desc = new RTCSessionDescription(answer);
|
||||
// await peerConnection.setRemoteDescription(desc);
|
||||
// }
|
||||
//}
|
||||
|
||||
async function CollectIceCandidates()
|
||||
{
|
||||
@@ -284,6 +301,8 @@ async function CollectIceCandidates()
|
||||
}
|
||||
async function handleRtcSignal(rawJson) {
|
||||
try {
|
||||
LogMessage("handleRtcSignal raw: " + JSON.stringify(rawJson));
|
||||
|
||||
const msg = typeof rawJson === "string" ? JSON.parse(rawJson) : rawJson;
|
||||
|
||||
LogMessage("Received signal: " + msg.type + " from " + msg.from + " in " + msg.channelId);
|
||||
@@ -436,8 +455,15 @@ async function waitForIceGatheringComplete(pc) {
|
||||
});
|
||||
}
|
||||
|
||||
function dispatchRtcSignal(rawJson) {
|
||||
handleRtcSignal(rawJson);
|
||||
return "ok";
|
||||
}
|
||||
|
||||
window.handleRtcSignal = handleRtcSignal;
|
||||
|
||||
window.dispatchRtcSignal = dispatchRtcSignal;
|
||||
|
||||
window.addEventListener("HybridWebViewMessageReceived", function (e) {
|
||||
LogMessage("Raw message: " + e.detail.message);
|
||||
});
|
||||
@@ -446,4 +472,9 @@ window.addEventListener("load", async () => {
|
||||
LogMessage("RTC page loaded");
|
||||
window.HybridWebView.SendRawMessage("rtc_page_ready");
|
||||
await loadDevices();
|
||||
});
|
||||
});
|
||||
|
||||
window.dispatchRtcSignal = function(rawJson) {
|
||||
handleRtcSignal(rawJson);
|
||||
return "ok";
|
||||
};
|
||||
Reference in New Issue
Block a user