Skip to content

Commit

Permalink
fix caller logic sometimes not working
Browse files Browse the repository at this point in the history
  • Loading branch information
sangonz193 committed Apr 21, 2024
1 parent a773cfe commit 2682d69
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 21 deletions.
74 changes: 66 additions & 8 deletions modules/connections/connect-caller-peer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ export const connectCallerPeerMachine = setup({
input: {} as Input,
context: {} as Context,
events: {} as Event,
children: {} as {
cleanUpSignalingRows: "cleanUpSignalingRows"
webRtcSignals: "webRtcSignals"
connectPeer: "connectPeer"
},
},
actions: {
removeDataChannel: assign({
Expand Down Expand Up @@ -89,18 +94,56 @@ export const connectCallerPeerMachine = setup({
else logger.info("[connectCallerPeerMachine] ice candidate sent")
})
},
savePendingIceCandidate: assign({
pendingIceCandidates: (
{ context: { pendingIceCandidates } },
candidate: RTCIceCandidate,
) => [...pendingIceCandidates, candidate],
}),
sendPendingIceCandidates: assign({
pendingIceCandidates: ({
context: { pendingIceCandidates, supabase, remoteUserId, currentUser },
}) => {
logger.info(
"[connectCallerPeerMachine] sending pending ice candidates",
pendingIceCandidates.length,
)
supabase
.from("web_rtc_signals")
.insert(
pendingIceCandidates.map((candidate) => ({
from_user_id: currentUser.id,
to_user_id: remoteUserId,
payload: candidate as unknown as Json,
})),
)
.then(({ error }) => {
if (error)
logger.error(
"[connectCallerPeerMachine] sendPendingIceCandidates error",
error,
)
else
logger.info(
"[connectCallerPeerMachine] pending ice candidates sent",
)
})

return []
},
}),
},
actors: {
cleanUpSignalingRows: cleanUpSignalingRowsActor,
listenForSignals: webRtcSignals,
connectPeer,
webRtcSignals,
},
guards: {
hasOffer: ({ context }) => context.offer !== undefined,
hasAnswer: ({ context }) => context.answer !== undefined,
},
}).createMachine({
/** @xstate-layout N4IgpgJg5mDOIC5QGMD2A7dZkBcC0ADmGAE6x7ICGANtaQMSwCWU6NsAdE8mBZehCYRKOMAG0ADAF1EoAqmY4mGWSAAeiAGwAOAIwcATAc2aALAGZdR7cfMAaEAE9EBiaY4BOCZt0nf20wDzTQBfEIc0TGx8IlJyKloGZlZ2Dn5YAHdSSRkkEHlFZXRVDQQdDw4rbQ9TU11TAFYAj00HZwQrMIiMLFxCYjI+RJJ6WJIKHuiijgg4ZBImAiUMHNUCpmXivNLNJo4TUwkPAHZdY7dzjzbEXQltDkbzCXNjk81zBvqukEjemIH4jQ6CMxhMorhprAAK7IHiwWAAMyh1FWeXWmxKiGOx2uCAapgqHw85gs5m0Ega5g82m+v2i-TiQ2BowGYL+024vCoAiEInE0jWCg2RUxZQJDwMug8ul0wQkBlMBnsTixNQ4DU0BgaBi8xwaLVltMmfTGgOGHAylGF6CgAAIEagSLb0lkRqi5EKMdsbvUJOqlQTgkqFeYDLjTJoKrdidHtNUPNSjeD-oyEsCOMg6PwmDbbVCCLaCCQwAA3ZRQ2DOnCiAC2S1g9AgGDAXHQJdQAGsW3STQCmaQM1n0Dm7fnC8Wy6gK1Xa-WEDn21RNjl3flPSLvQgyX6JLoNQY9buTnvwzoOETLKctVrjhGk38GYM0wP5mARCPbagEQiGKv0RvQFKPRzH2I5DjuWVyl0cMI0qUNjjMPRtQPJUwnCEB0FQWZ4DyHsUyfIFSEFQoVE3HVcQMbQQKJa9Xk0O4DHvelTX7EgLStJRcwdJ0XSItF11IwDEA8bVDAaCRdwkY4nn1MMVQQCNjnPWSE1DJpGmxJje1TQi2KbLBiOFQT1EQMkGg4Xd90PKVTgaXFtU0ZTiQ+M43HMYItPws100zN9h1zMci1LctKxEWccBwj0SK2ISEGxGCQO0FSZT3aSRIaTzH28gdYDAasP2LGtUFEZ10EyPioqMmKTI6SiKjueiXI8Ixgjs+TakS5KZQaNKGgy9C8Ky1iM2Ld9cy-H8SEMr1Yr8CyJPlbxpKpDVTyUmjVK1AIeuONCQiAA */
/** @xstate-layout N4IgpgJg5mDOIC5QGMD2A7dZkBcC0ADmGAE6x7ICGANtaQMSwCWU6NsAdE8mBZehCYRKOMAG0ADAF1EoAqmY4mGWSAAeiAOwBWAJwdNAFgBMpgBwA2CQGZtmzWYA0IAJ6IAjBLMdD26xMMAw2DjbXdNAF8I5zRMbHwiUnIqWgZmVnYOflgAd1JJGSQQeUVldFUNBAdrDm0LC2DDXQkws1tnNwQLXW8zd2NrawH-L11dKJiMLFxCYjI+VJJ6RJIKKfiyjgg4ZBImAiUMAtUSpkPyosrNa0MOL2MJTXrA92t6jo9jCZBY6YS55I0OhLFZrOK4TawACuyB4sFgADModRjkVTucKlpNB8ENZNMYfCYjDdjPZHmZtN9fvFZkkFsDlnMwX9NtxeFQBEIROJpCcFGcypiqsZbm0xgELDpbDocVYCbZdMZdO4zBTnmYqesZitAYsODlKAL0FAAAQI1AkE3ZPJLVFyfkYy6fV4cSXGdyGazudy6QwepyuRCGSWuxUWax9TTKwZmQya8H-OkpYEcZB0fhMY0mqEEE0EEhgABuyihsCtOFEAFsDrB6BAMGAuOhC6gANaNtNgfgAVQIAGUWGxqJmoAAlVA5WB24oOwVOhCGewcMYrvw3CzaULYwML+rLkwb3ThyVmZXxv60+bJ0gcWBgCsjk0FyuoURW9C5Big6kQjBcHh8JywiiNO6JzqAlSvCGviaCq9gWP0ATaDiNyaD4EgIboRimH4koWOeNI6vSN67F2ShZqgCIIgwoGzio86qhYBh2LGPRWDYxgWDijQGO4Vj2GE7jaDYkpRNEIDoKg2zwEUP6JleQKkHypT0RBiBKjiKpMc0mESAMzQOOM4lyZeuopgaRqmualrWkpaJ0RcakIJ4oQcNYPTaJ6uibrYAadMG2j7pxi5mE8HnWAR2oAsRJBbA2ykCqp6hBkuK5jGuAVbihhjeD6pKBFKsZNJF8lmSR6boI+OZ5gWxaoKW5ZVjWCWOk59jcUMQX1KEbyhZx+HGVqpUxbe97kaaz6vmA76fiQLXgclzlvASAzBg8sYWGY9zcTlHAUroqHurBzRxoNCamSNpEiI+lHUXN9kqY5i3XLc-rBMJEijEM3Ebl1IVhRSEViUAA */
id: "connect-peers-caller",

context: ({ input }) => ({
Expand All @@ -118,7 +161,8 @@ export const connectCallerPeerMachine = setup({
}),
},
{
src: "listenForSignals",
src: "webRtcSignals",
id: "webRtcSignals",
input: ({ context }) => context,
},
],
Expand All @@ -139,16 +183,30 @@ export const connectCallerPeerMachine = setup({
"cleaning up previous attempts": {
invoke: {
src: "cleanUpSignalingRows",
id: "cleanUpSignalingRows",
input: ({ context }) => context,
onDone: "creating offer",
},
},

"setting remote answer": {
entry: sendTo("someActor", ({ context }) => ({
type: "someEvent",
data: context.answer!,
})),
entry: [
sendTo("someActor", ({ context }) => ({
type: "someEvent",
data: context.answer!,
})),
"sendPendingIceCandidates",
],

on: {
"peer-connection.ice-candidate": {
target: "setting remote answer",
actions: {
type: "sendIceCandidate",
params: ({ event }) => event.candidate,
},
},
},
},

"creating offer": {
Expand Down Expand Up @@ -203,7 +261,7 @@ export const connectCallerPeerMachine = setup({

"peer-connection.ice-candidate": {
actions: {
type: "sendIceCandidate",
type: "savePendingIceCandidate",
params: ({ event }) => event.candidate,
},
},
Expand Down
3 changes: 2 additions & 1 deletion modules/connections/connect-peer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ const invoke: InvokeCallback<
logger.info("[connect-peer] Remote description set")

pendingIceCandidates.map((candidate) => {
logger.info("[connect-peer] Adding pending ice candidate", candidate)
peerConnection.addIceCandidate(candidate)
})

Expand All @@ -99,7 +100,7 @@ const invoke: InvokeCallback<
logger.info("[connect-peer] Received ice candidate", event.candidate)
if (peerConnection.remoteDescription) {
peerConnection.addIceCandidate(event.candidate)
logger.info("[connect-peer] Added Ice candidate", event.candidate)
logger.info("[connect-peer] ice candidate added", event.candidate)
} else {
pendingIceCandidates.push(event.candidate)
logger.info(
Expand Down
11 changes: 9 additions & 2 deletions modules/connections/connect-receiver-peer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ export const connectReceiverPeerMachine = setup({
input: {} as Input,
context: {} as Context,
events: {} as Event,
children: {} as {
cleanUpSignalingRows: "cleanUpSignalingRows"
webRtcSignals: "webRtcSignals"
connectPeer: "connectPeer"
},
},
actions: {
setAnswerToContext: assign({
Expand Down Expand Up @@ -81,7 +86,7 @@ export const connectReceiverPeerMachine = setup({
},
actors: {
cleanUpSignalingRows: cleanUpSignalingRowsActor,
listenForSignals: webRtcSignals,
webRtcSignals,
connectPeer,
},
guards: {
Expand All @@ -106,7 +111,8 @@ export const connectReceiverPeerMachine = setup({
}),
},
{
src: "listenForSignals",
src: "webRtcSignals",
id: "webRtcSignals",
input: ({ context }) => context,
},
],
Expand Down Expand Up @@ -136,6 +142,7 @@ export const connectReceiverPeerMachine = setup({
"cleaning up previous attempts": {
invoke: {
src: "cleanUpSignalingRows",
id: "cleanUpSignalingRows",
onDone: "creating answer",
input: ({ context }) => context,
},
Expand Down
10 changes: 3 additions & 7 deletions modules/connections/item/machine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,7 @@ export const connectionMachine = setup({
fileToSend: (_, file: File) => file,
}),
setDataChannelToContext: assign({
dataChannel: (_, channel: RTCDataChannel) => {
console.log("*** channel", channel.label)
return channel
},
dataChannel: (_, channel: RTCDataChannel) => channel,
}),
closePeerConnection: enqueueActions(({ enqueue, context }) => {
enqueue.stopChild("peerConnectionEvents")
Expand All @@ -90,9 +87,8 @@ export const connectionMachine = setup({
receiveFile,
},
guards: {
isFileDataChannel: (_, dataChannel: RTCDataChannel) => {
return dataChannel.label === "file"
},
isFileDataChannel: (_, dataChannel: RTCDataChannel) =>
dataChannel.label === "file",
},
}).createMachine({
/** @xstate-layout N4IgpgJg5mDOIC5QGMD2A7dZkBcCWGAdHhADZgDEsY6EAtAGZ7kDaADALqKgAOqsefBm4gAHogCMANjaEALAE4lCgMxsAHACY2AVgVSVAGhABPRDoOEJAdgXWNU6yrlS5mgL7vjaTNiHpiMkofLFwCdDoAJzAARwBXOBwo7DA8ADdIdi4kED4BfxFxBGlZRWU1LV19I1NETWsdQmtNKR0dFR0JdTlO-U9vDFD-QhC-PHQoCggMMGJ0NNQAa1nRsKJV-AmEcYXkAEN-LKyRPMFwwsQGhXllbs7rOXVu4zMEGQkrFU0FXUf1NhUTn6IA24UI1Fo4ygAAImOQKDwwGBIiNBmMMLAcAdsAALPYTMDHHKnAo5IpXG5KO42P5yF6IORueTfRxsFzqOwSHTA0FEHiRVAAWx4mxhcWokWhOFQ0L2yGQYBF0N56AocoVIqJvH4Z2EZMuekpCmpDyedNqCHqsgkci+jykmi+3wkPLRawC-KFIqh0PFyKlMvVipwyrd-im2FI40JnBOOtJoCKXw+Kg6xsenTY+npls0jU0LRkbAdWh+QK8ILDYNBE2hAHdBDjlXtSORIgikSiIAc5XjfKQtbl4+d9cU5BJNFYsyplGw2Zpza8rVZbQv1A6nQoXRWVYRogr0j64ZR96kMoxmLNplhBySR4nJIzZEpHXPWnmAdYc+oPjo52xXz-aw7gUTwK3QVAIDgEQVTjfJ7zERA6CkHM6EaZQFHHDQ5AaCRMKkV1fHdQJyDg3V0AuBA3BzHRuiaJQcMdR0fxUbcBiI4YaygMiE0QqicMIL4AQA9QdDkNgJBpGjrCkQgDE0J42CcPQt1AncqyICEICPS8eIQooJCzawrFcSSlNopwJBqV4LBUQhNGkBzgPsJ4nkIoYwU9YVRV9CUA1leVg1DDiELvPUHyowErAUdptDUBpbS-C1vjsqQ8OcpQHTcCx3PRAIuPrRtm1bZE9PCvjDLsEzx0Mhp1Es6y6nsKw8P+Rw82aCS5Fy4jT0PWtjzKijR2kRlCB+Ax2htGkdBzPNZPsVjbXXYsbG3TwgA */
Expand Down
10 changes: 7 additions & 3 deletions modules/connections/web-rtc-signals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,13 @@ export const webRtcSignals = fromCallback<{ type: "noop" }, Input>((params) => {

function handleRow(newRow: Tables<"web_rtc_signals">) {
if (newRow.to_user_id !== currentUser.id) {
logger.info(
`[webRtcSignals] Ignoring signal for another user ${newRow.to_user_id}`,
)
if (newRow.from_user_id === currentUser.id) {
// This is a signal that we sent, ignore it
} else {
logger.info(
`[webRtcSignals] Ignoring signal for another user ${newRow.to_user_id}`,
)
}
return
}

Expand Down

0 comments on commit 2682d69

Please sign in to comment.