table and reducer updates

This commit is contained in:
2026-03-30 17:01:52 -04:00
parent b9524fbfd4
commit 76ed6d7ab3
+30
View File
@@ -412,6 +412,31 @@ export const leave_voice = spacetimedb.reducer((ctx) => {
export const send_sdp_offer = spacetimedb.reducer(
{ receiver: t.identity(), sdp: t.string(), channelId: t.u64() },
(ctx, { receiver, sdp, channelId }) => {
// Clear any existing offers/answers/candidates between this pair in both directions
// to ensure a fresh negotiation state.
// Outgoing from sender to receiver
for (const offer of ctx.db.sdp_offer.by_sender.filter(ctx.sender)) {
if (offer.receiver.isEqual(receiver)) ctx.db.sdp_offer.id.delete(offer.id);
}
for (const answer of ctx.db.sdp_answer.by_sender.filter(ctx.sender)) {
if (answer.receiver.isEqual(receiver)) ctx.db.sdp_answer.id.delete(answer.id);
}
for (const cand of ctx.db.ice_candidate.by_sender.filter(ctx.sender)) {
if (cand.receiver.isEqual(receiver)) ctx.db.ice_candidate.id.delete(cand.id);
}
// Incoming to sender from receiver (stale messages from previous negotiations)
for (const offer of ctx.db.sdp_offer.by_receiver.filter(ctx.sender)) {
if (offer.sender.isEqual(receiver)) ctx.db.sdp_offer.id.delete(offer.id);
}
for (const answer of ctx.db.sdp_answer.by_receiver.filter(ctx.sender)) {
if (answer.sender.isEqual(receiver)) ctx.db.sdp_answer.id.delete(answer.id);
}
for (const cand of ctx.db.ice_candidate.by_receiver.filter(ctx.sender)) {
if (cand.sender.isEqual(receiver)) ctx.db.ice_candidate.id.delete(cand.id);
}
ctx.db.sdp_offer.insert({ id: 0n, sender: ctx.sender, receiver, sdp, channel_id: channelId });
}
);
@@ -419,6 +444,11 @@ export const send_sdp_offer = spacetimedb.reducer(
export const send_sdp_answer = spacetimedb.reducer(
{ receiver: t.identity(), sdp: t.string(), channelId: t.u64() },
(ctx, { receiver, sdp, channelId }) => {
for (const answer of ctx.db.sdp_answer.by_sender.filter(ctx.sender)) {
if (answer.receiver.isEqual(receiver)) {
ctx.db.sdp_answer.id.delete(answer.id);
}
}
ctx.db.sdp_answer.insert({ id: 0n, sender: ctx.sender, receiver, sdp, channel_id: channelId });
}
);