commit c6e457af0c9f6a39bab6050cd8ad8ac5633e13ba
parent 5fd79e83b1d92a6fb76b8fcd0d6d0325b5a0d618
Author: Michael Camilleri <[email protected]>
Date: Mon, 25 May 2026 23:07:19 +0900
Add additional instrumentation to WebRTC bridge
Diffstat:
1 file changed, 35 insertions(+), 2 deletions(-)
diff --git a/Crossmate/Services/EngagementHost.html b/Crossmate/Services/EngagementHost.html
@@ -21,6 +21,14 @@
});
}
+ function postDiagnostic(engagementID, message) {
+ post({
+ type: "onDiagnostic",
+ engagementID,
+ message
+ });
+ }
+
function defaultIceServers() {
return [{ urls: "stun:stun.cloudflare.com:3478" }];
}
@@ -43,6 +51,7 @@
peers.set(engagementID, peer);
pc.ondatachannel = (event) => {
+ postDiagnostic(engagementID, "data channel received label=" + event.channel.label);
attachChannel(engagementID, event.channel);
};
pc.onconnectionstatechange = () => {
@@ -70,7 +79,17 @@
}
peer.channel = channel;
channel.binaryType = "arraybuffer";
- channel.onopen = () => post({ type: "onChannelOpen", engagementID });
+ postDiagnostic(
+ engagementID,
+ "data channel attached label=" + channel.label + " state=" + channel.readyState
+ );
+ channel.onopen = () => {
+ postDiagnostic(
+ engagementID,
+ "data channel open label=" + channel.label + " buffered=" + channel.bufferedAmount
+ );
+ post({ type: "onChannelOpen", engagementID });
+ };
channel.onclose = () => postClose(engagementID, "dataChannel");
channel.onerror = (event) => postError(engagementID, event.error || "Data channel error");
channel.onmessage = async (event) => {
@@ -83,6 +102,10 @@
} else {
bytes = new TextEncoder().encode(String(event.data));
}
+ postDiagnostic(
+ engagementID,
+ "data channel receive bytes=" + bytes.byteLength + " state=" + channel.readyState
+ );
post({
type: "onChannelMessage",
engagementID,
@@ -218,9 +241,19 @@
function send(engagementID, base64Message) {
const peer = peers.get(engagementID);
if (!peer || !peer.channel || peer.channel.readyState !== "open") {
+ postDiagnostic(
+ engagementID,
+ "data channel send rejected state=" + (peer && peer.channel ? peer.channel.readyState : "missing")
+ );
throw new Error("Engagement channel is not open");
}
- peer.channel.send(base64ToBytes(base64Message));
+ const bytes = base64ToBytes(base64Message);
+ peer.channel.send(bytes);
+ postDiagnostic(
+ engagementID,
+ "data channel send accepted bytes=" + bytes.byteLength +
+ " buffered=" + peer.channel.bufferedAmount
+ );
return true;
}