log cleanup and expose members$

This commit is contained in:
Timo K
2025-12-01 13:49:33 +01:00
parent 284a52c23c
commit 0664af0f1b
5 changed files with 58 additions and 16 deletions

View File

@@ -4,6 +4,7 @@
<title>Godot MatrixRTC Widget</title>
<meta charset="utf-8" />
<script type="module">
// TODO use the url where the matrixrtc-ec-godot.js file from dist is hosted
import { createMatrixRTCSdk } from "http://localhost:8123/matrixrtc-ec-godot.js";
try {
@@ -20,18 +21,43 @@
await window.matrixRTCSdk.join();
console.info("matrixRTCSdk joined ");
// window.matrixRTCSdk.data$.subscribe((data) => {
// console.log(data);
// const div = document.getElementById("data");
// div.appendChild(document.createTextNode(data));
// // TODO forward to godot
// });
const div = document.getElementById("data");
div.innerHTML = "<h3>Data:</h3>";
window.matrixRTCSdk.data$.subscribe((data) => {
const child = document.createElement("p");
child.innerHTML = JSON.stringify(data);
div.appendChild(child);
// TODO forward to godot
});
window.matrixRTCSdk.members$.subscribe((memberObjects) => {
console.info("members changed", memberObjects);
// reset div
const div = document.getElementById("members");
div.innerHTML = "<h3>Members:</h3>";
// create member list
const members = memberObjects.map((member) => member.userId);
console.info("members changed", members);
for (const m of members) {
console.info("member", m);
const child = document.createElement("p");
child.innerHTML = m;
div.appendChild(child);
}
// TODO forward to godot
});
// TODO use it as godot HTML template
// var engine = new Engine($GODOT_CONFIG);
// engine.startGame();
} catch (e) {
console.error("catchALL,", e);
}
</script>
<!--// TODO use it as godot HTML template-->
<!--<script src="$GODOT_URL"></script>-->
</head>
<body>
@@ -39,6 +65,7 @@
<button onclick="window.matrixRTCSdk.sendData({prop: 'Hello, world!'});">
Send Text
</button>
<div id="members"></div>
<div id="data"></div>
<canvas id="canvas"></canvas>
</body>

View File

@@ -30,12 +30,14 @@ import {
widget,
} from "./helper";
import { ElementWidgetActions } from "../src/widget";
import { type MatrixLivekitMember } from "../src/state/CallViewModel/remoteMembers/MatrixLivekitMembers";
interface MatrixRTCSdk {
join: () => LocalMemberConnectionState;
/** @throws on leave errors */
leave: () => void;
data$: Observable<{ sender: string; data: string }>;
members$: Behavior<MatrixLivekitMember[]>;
sendData?: (data: unknown) => Promise<void>;
}
export async function createMatrixRTCSdk(): Promise<MatrixRTCSdk> {
@@ -143,7 +145,7 @@ export async function createMatrixRTCSdk(): Promise<MatrixRTCSdk> {
// create sendData function
const sendFn: Behavior<(data: string) => Promise<TextStreamInfo>> =
scope.behavior(
callViewModel.localmatrixLivekitMembers$.pipe(
callViewModel.localMatrixLivekitMember$.pipe(
switchMap((m) => {
if (!m)
return of((data: string): never => {
@@ -223,6 +225,7 @@ export async function createMatrixRTCSdk(): Promise<MatrixRTCSdk> {
livekitRoomItemsSub.unsubscribe();
},
data$,
members$: callViewModel.matrixLivekitMembers$,
sendData,
};
}