From b70189c619d9688829dc7f853a837c75fcd287a8 Mon Sep 17 00:00:00 2001 From: RuKira Date: Fri, 17 Apr 2026 16:47:30 -0400 Subject: [PATCH] Verify RTS Push to JS (fixes to application) --- RelayClient/MainPage.xaml.cs | 23 ++++++++++++++++++---- RelayClient/Resources/Raw/wwwroot/index.js | 10 ++++++---- RelayServer/Endpoints/RtcEndpoints.cs | 6 ++++++ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/RelayClient/MainPage.xaml.cs b/RelayClient/MainPage.xaml.cs index c4da6d7..cb587e6 100644 --- a/RelayClient/MainPage.xaml.cs +++ b/RelayClient/MainPage.xaml.cs @@ -198,13 +198,13 @@ public partial class MainPage : ContentPage return; } - if (type == SignalType.OfferUpdated || type == SignalType.AnswerUpdated || type == SignalType.CandidateAdded || type == SignalType.CallLeft) + if (type is SignalType.OfferUpdated or SignalType.AnswerUpdated or SignalType.CandidateAdded or SignalType.CallLeft) { var rtcNotification = JsonSerializer.Deserialize(e.Data); if (rtcNotification is null) return; - var notificationType = rtcNotification.Type ?? null; + var notificationType = rtcNotification.Type; var notificationChannelId = rtcNotification.ChannelId ?? string.Empty; if (notificationChannelId != _currentChannelId) @@ -216,8 +216,11 @@ public partial class MainPage : ContentPage { switch (notificationType) { - case SignalType.OfferUpdated : + case SignalType.OfferUpdated: { + if (rtcNotification.Username == _username) + break; + var offer = await GetRtcOffer(); await SendRtcSignalToJsAsync(offer); break; @@ -233,9 +236,16 @@ public partial class MainPage : ContentPage } case SignalType.CandidateAdded: { + if (rtcNotification.Username == _username) + break; + try { IceCandidate? iceCandidate = JsonSerializer.Deserialize(rtcNotification.Direction); + + if (iceCandidate is null) + break; + IceCandidateCallback(iceCandidate); } catch (Exception ex) @@ -600,6 +610,11 @@ public partial class MainPage : ContentPage Console.WriteLine($"[{_username}] sent RTC signal: {rtcSignal.Type} -> {rtcSignal.ChannelId}"); } //Remove? + //public async Task GetRtcParticipants() // TODO: UNCOMMENT AND ADD + //{ + // var participants = await ServerAPI.GetRtcParticipantsAsync(_currentChannelId); + // return JsonSerializer.Serialize(participants); + //} #endregion private void OnSendMessageButtonClicked(object sender, EventArgs e) @@ -615,7 +630,7 @@ public partial class MainPage : ContentPage return; } - await DisplayAlertAsync("Raw Message Received", e.Message, "OK"); + SafeSendRawToWebView($"JS RAW -> C#: {e.Message}"); } private void SafeSendRawToWebView(string message) diff --git a/RelayClient/Resources/Raw/wwwroot/index.js b/RelayClient/Resources/Raw/wwwroot/index.js index 8933478..bbcc65f 100644 --- a/RelayClient/Resources/Raw/wwwroot/index.js +++ b/RelayClient/Resources/Raw/wwwroot/index.js @@ -1,4 +1,6 @@ let peerConnection = null; +let peerConnections = {}; +let remoteStreams = {}; let localStream = null; let currentUsername = null; let currentChannelId = null; @@ -241,7 +243,7 @@ async function joinChannelCall() { // } } //Combine with channelCallJoin -async function ensurePeerConnection2() +async function ensurePeerConnectionForUser(username) { if (peerConnection) return; peerConnection = new RTCPeerConnection(configuration); @@ -263,7 +265,7 @@ async function ensurePeerConnection2() console.log(`Ice Candidate: ${JSON.stringify(event.candidate)}`); // LogMessage(`Ice Candidate: ${JSON.stringify(event.candidate)}`); await window.HybridWebView.InvokeDotNet("WriteIceCandidate", [JSON.stringify(event.candidate)]); - await IceCandidateAdded(event.candidate); + //await IceCandidateAdded(event.candidate); }; peerConnection.ontrack = (event) => { @@ -297,7 +299,7 @@ async function ensurePeerConnection2() async function channelCallJoin(activeCall) { // LogMessage("Active call: " + activeCall); - await ensurePeerConnection2(); + await ensurePeerConnectionForUser(); await ensureLocalMedia(); await applyLocalStreamToPeerConnection(); @@ -529,7 +531,7 @@ async function waitForIceGatheringComplete(pc) { }); } //Remove? -// window.handleRtcSignal = handleRtcSignal; +window.handleRtcSignal = handleRtcSignal; window.addEventListener("HybridWebViewMessageReceived", function (e) { LogMessage("Raw message: " + e.detail.message); diff --git a/RelayServer/Endpoints/RtcEndpoints.cs b/RelayServer/Endpoints/RtcEndpoints.cs index f3fcbb5..ce01327 100644 --- a/RelayServer/Endpoints/RtcEndpoints.cs +++ b/RelayServer/Endpoints/RtcEndpoints.cs @@ -70,6 +70,12 @@ public static class RtcEndpoints { return Results.Ok(await rtcCallService.GetAnswersAsync(channelId)); }); + + //app.MapGet("/api/rtc/participants/{channelId}", (string channelId) => // TODO: UNCOMMENT AND ADD + //{ + // var participants = RtcChannelPresenceService.GetUsernamesInChannel(channelId); + // return Results.Ok(participants); + //}); // Return the latest answer stored for the specified channel. app.MapGet("/api/rtc/answer/{channelId}", async (string channelId, RtcCallService rtcCallService) =>