table and reducer updates
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user