A step in the right direction
This commit is contained in:
@@ -106,7 +106,7 @@ public partial class MainPage : ContentPage
|
||||
return;
|
||||
}
|
||||
|
||||
SafeSendRawToWebView($"[{_username}] RAW WS DATA: {e.Data}");
|
||||
// SafeSendRawToWebView($"[{_username}] RAW WS DATA: {e.Data}");
|
||||
|
||||
Console.WriteLine($"[{_username}] RAW WS DATA: {e.Data}");
|
||||
|
||||
@@ -210,7 +210,7 @@ public partial class MainPage : ContentPage
|
||||
if (notificationChannelId != _currentChannelId)
|
||||
return;
|
||||
|
||||
SafeSendRawToWebView("RTC notification received: " + notificationType + " for " + notificationChannelId);
|
||||
// SafeSendRawToWebView("RTC notification received: " + notificationType + " for " + notificationChannelId);
|
||||
|
||||
MainThread.BeginInvokeOnMainThread(async () =>
|
||||
{
|
||||
@@ -434,7 +434,7 @@ public partial class MainPage : ContentPage
|
||||
|
||||
_wsc.Send($"RTC_JOIN_CHANNEL|{_username}|{_currentChannelId}");
|
||||
|
||||
SafeSendRawToWebView($"Attempting to join RTC Channel {_currentChannelName} | {_currentChannelId} ");
|
||||
// SafeSendRawToWebView($"Attempting to join RTC Channel {_currentChannelName} | {_currentChannelId} ");
|
||||
|
||||
bool active = await ServerAPI.GetIsChannelActiveAsync(_currentChannelId);
|
||||
|
||||
@@ -462,11 +462,12 @@ public partial class MainPage : ContentPage
|
||||
Username = _username,
|
||||
SessionDescription = description
|
||||
};
|
||||
await ServerAPI.PostOfferAsync(offer);
|
||||
var response = await ServerAPI.PostOfferAsync(offer);
|
||||
SafeSendRawToWebView(response.ToString());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SafeSendRawToWebView(ex.Message);
|
||||
SafeSendRawToWebView($"WriteRtcOffer failed: {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -161,37 +161,81 @@ async function joinChannelCall() {
|
||||
LogMessage("Current username: " + currentUsername);
|
||||
LogMessage("Current channel: " + currentChannelId);
|
||||
|
||||
await window.HybridWebView.InvokeDotNet("JoinRtcChannel");
|
||||
const isActive = await window.HybridWebView.InvokeDotNet("JoinRtcChannel");
|
||||
const peerConnection = await ensurePeerConnectionForUser(currentUsername);
|
||||
await ensureLocalMedia();
|
||||
|
||||
const rawParticipants = await window.HybridWebView.InvokeDotNet("GetRtcParticipants");
|
||||
const participants = typeof rawParticipants === "string"
|
||||
? JSON.parse(rawParticipants)
|
||||
: rawParticipants;
|
||||
if (isActive) {
|
||||
|
||||
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.setRemoteDescription(answer);
|
||||
await window.HybridWebView.InvokeDotNet("WriteRtcAnswer", [JSON.stringify(answer)])
|
||||
|
||||
LogMessage("Participants: " + JSON.stringify(participants)); // TODO: Remove
|
||||
const rawParticipants = await window.HybridWebView.InvokeDotNet("GetRtcParticipants");
|
||||
const participants = typeof rawParticipants === "string" ? JSON.parse(rawParticipants) : rawParticipants;
|
||||
|
||||
for (const username of participants) {
|
||||
if (username === currentUsername) continue;
|
||||
LogMessage("Participants: " + JSON.stringify(participants)); // TODO: Remove
|
||||
|
||||
const pc = await ensurePeerConnectionForUser(username);
|
||||
for (const username of participants) {
|
||||
if (username === currentUsername) continue;
|
||||
|
||||
const offer = await pc.createOffer();
|
||||
await pc.setLocalDescription(offer);
|
||||
const pc = await ensurePeerConnectionForUser(username);
|
||||
|
||||
const payload = {
|
||||
type: "rtc_offer",
|
||||
from: currentUsername,
|
||||
to: username,
|
||||
channelId: currentChannelId,
|
||||
sdp: offer.sdp
|
||||
};
|
||||
const offer = await pc.createOffer();
|
||||
await pc.setLocalDescription(offer);
|
||||
|
||||
await window.HybridWebView.InvokeDotNet("SendRtcSignal", [JSON.stringify(payload)]);
|
||||
LogMessage(`Sent offer to ${username}`);
|
||||
const payload = {
|
||||
type: "rtc_offer",
|
||||
from: currentUsername,
|
||||
to: username,
|
||||
channelId: currentChannelId,
|
||||
sdp: offer.sdp
|
||||
};
|
||||
|
||||
await window.HybridWebView.InvokeDotNet("SendRtcSignal", [JSON.stringify(payload)]);
|
||||
LogMessage(`Sent offer to ${username}`);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
LogMessage(currentUsername + " attempted to join inactive channel. Making new call.")
|
||||
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)}`);
|
||||
}
|
||||
catch (error) {
|
||||
LogMessage(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
async function channelCallJoin(activeCall)
|
||||
{
|
||||
// LogMessage("Active call: " + activeCall);
|
||||
await ensurePeerConnectionForUser(currentUsername);
|
||||
|
||||
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);
|
||||
// LogMessage("Joining call with media answer: " + JSON.stringify(answer));
|
||||
// LogMessage("Calling C# WriteRtcAnswer with: " + JSON.stringify(answer));
|
||||
await window.HybridWebView.InvokeDotNet("WriteRtcAnswer", [JSON.stringify(answer)]);
|
||||
}
|
||||
else
|
||||
{
|
||||
const offer = await peerConnection.createOffer();
|
||||
await peerConnection.setLocalDescription(offer);
|
||||
await window.HybridWebView.InvokeDotNet("WriteRtcOffer", [JSON.stringify(offer)]);
|
||||
}
|
||||
}
|
||||
async function ensurePeerConnectionForUser(username) {
|
||||
if (peerConnections[username]) return peerConnections[username];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user