brokededed again

This commit is contained in:
2026-04-06 17:42:14 -04:00
parent 7d8755ca71
commit 3c1a4c7a2d
2 changed files with 45 additions and 8 deletions

View File

@@ -2,6 +2,8 @@
using RelayClient.Models; using RelayClient.Models;
using WebSocketSharp; using WebSocketSharp;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
namespace RelayClient; namespace RelayClient;
@@ -226,8 +228,7 @@ public partial class MainPage : ContentPage
var answer = await ServerAPI.GetAnswerForChannelAsync(_currentChannelId); var answer = await ServerAPI.GetAnswerForChannelAsync(_currentChannelId);
if (answer is not null) if (answer is not null)
{ {
var json = JsonSerializer.Serialize(answer); await AnswerCallback(answer);
await hybridWebView.EvaluateJavaScriptAsync($"window.AnswerCallback({json})");
} }
break; break;
} }
@@ -476,10 +477,22 @@ public partial class MainPage : ContentPage
} }
} }
public async void AnswerCallback(RtcDescription answer) public async Task AnswerCallback(RtcDescription answer)
{ {
var json = JsonSerializer.Serialize(answer); string json = JsonSerializer.Serialize(answer);
await hybridWebView.EvaluateJavaScriptAsync($"window.AnswerCallback({json})"); SafeSendRawToWebView("WriteRtcAnswer answered with: " + json);
try
{
SafeSendRawToWebView("Pre");
// await hybridWebView.InvokeJavaScriptAsync("CSharpCallTest", ["value from C#"], [HybridJSTypeString.Default.String]);
// SafeSendRawToWebView("Mid");
await hybridWebView.InvokeJavaScriptAsync("AnswerCallback", [json], [HybridJSTypeString.Default.String]);
SafeSendRawToWebView("End");
}
catch (Exception ex)
{
SafeSendRawToWebView("WriteRtcAnswer failed: " + ex.Message);
}
} }
private void OnSendMessageButtonClicked(object sender, EventArgs e) private void OnSendMessageButtonClicked(object sender, EventArgs e)
@@ -568,4 +581,20 @@ public partial class MainPage : ContentPage
} }
}); });
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(string))]
internal partial class HybridJSTypeString : JsonSerializerContext
{
// This type's attributes specify JSON serialization info to preserve type structure
// for trimmed builds.
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(RtcDescription))]
internal partial class HybridJSTypeRtcDescription : JsonSerializerContext
{
// This type's attributes specify JSON serialization info to preserve type structure
// for trimmed builds.
}
} }

View File

@@ -258,13 +258,21 @@ async function channelCallJoin(activeCall)
}); });
} }
} }
async function CSharpCallTest(value)
{
LogMessage("Called from C#: " + value);
}
async function AnswerCallback(answer) async function AnswerCallback(answer)
{ {
LogMessage("Answer: " + JSON.stringify(answer)); LogMessage("Answer: " + answer);
if (!peerConnection.currentRemoteDescription && answer.answer) let callBack = JSON.parse(answer);
LogMessage("Call Back: " + callBack);
if (!peerConnection.currentRemoteDescription && callBack)
{ {
LogMessage("Current answer: " + answer); LogMessage("Current answer: " + callBack);
const desc = new RTCSessionDescription(answer); const desc = new RTCSessionDescription(answer);
await peerConnection.setRemoteDescription(desc); await peerConnection.setRemoteDescription(desc);
} }