Transform CallProvider into 'CallManager' hook, review WebSocket messages for calls
- These changes allowed to remove more cascading effects. It is now possible to reactivate StrictMode. Downside is we lost the 'optional context' of CallProvider: the call logic will be loaded even if there is no call.
- The WebSocket messages have been changed so the client does not have to know the conversation members before a call. Previously, the client had to fetch the conversation members for a call, which was causing cascading effects.
- Accidentally, moving the handling of conversation members to the server added some logic for calls with more than two participants, but it is still not ready to work.
* CallProvider.tsx will be renamed in next commit in order to make it easier to track its file history
Change-Id: Iae711009adafce065ac3defc1c91c7ca0f37898c
diff --git a/common/src/interfaces/websocket-interfaces.ts b/common/src/interfaces/websocket-interfaces.ts
index f680e16..82ac1e0 100644
--- a/common/src/interfaces/websocket-interfaces.ts
+++ b/common/src/interfaces/websocket-interfaces.ts
@@ -18,7 +18,7 @@
import { Message } from './conversation.js';
export interface ContactMessage {
- contactId: string;
+ senderContactId: string;
}
export interface ConversationMessage {
@@ -36,14 +36,29 @@
isWriting: boolean;
}
-export interface CallAction extends ContactMessage {
+export interface WithSender {
+ senderId: string;
+}
+
+export interface WithReceiver {
+ receiverId: string;
+}
+
+export interface CallAction {
conversationId: string;
}
-export interface CallBegin extends CallAction {
+export interface CallInvite extends CallAction {
withVideoOn: boolean;
}
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface CallJoin extends CallAction {}
+
+export interface CallExit {
+ conversationId: string;
+}
+
export interface WebRtcSdp extends CallAction {
sdp: RTCSessionDescriptionInit;
}
diff --git a/common/src/interfaces/websocket-message.ts b/common/src/interfaces/websocket-message.ts
index b908737..f85ea5e 100644
--- a/common/src/interfaces/websocket-message.ts
+++ b/common/src/interfaces/websocket-message.ts
@@ -18,26 +18,37 @@
import { WebSocketMessageType } from '../enums/websocket-message-type.js';
import { IConversationRequest } from './conversation.js';
import {
- CallAction,
- CallBegin,
+ CallExit,
+ CallInvite,
+ CallJoin,
ComposingStatus,
ConversationMessage,
ConversationView,
WebRtcIceCandidate,
WebRtcSdp,
+ WithReceiver,
+ WithSender,
} from './websocket-interfaces.js';
export interface WebSocketMessageTable {
- [WebSocketMessageType.CallAccept]: CallAction;
- [WebSocketMessageType.CallBegin]: CallBegin;
- [WebSocketMessageType.CallEnd]: CallAction;
[WebSocketMessageType.ComposingStatus]: ComposingStatus;
[WebSocketMessageType.ConversationMessage]: ConversationMessage;
[WebSocketMessageType.ConversationRequest]: IConversationRequest;
[WebSocketMessageType.ConversationView]: ConversationView;
- [WebSocketMessageType.WebRtcOffer]: WebRtcSdp;
- [WebSocketMessageType.WebRtcAnswer]: WebRtcSdp;
- [WebSocketMessageType.WebRtcIceCandidate]: WebRtcIceCandidate;
+
+ // calls (in the order they should be sent)
+ [WebSocketMessageType.sendCallInvite]: CallInvite;
+ [WebSocketMessageType.onCallInvite]: CallInvite & WithSender;
+ [WebSocketMessageType.sendCallExit]: CallExit; // can be sent any time after invite
+ [WebSocketMessageType.onCallExit]: CallExit & WithSender;
+ [WebSocketMessageType.sendCallJoin]: CallJoin;
+ [WebSocketMessageType.onCallJoin]: CallJoin & WithSender;
+ [WebSocketMessageType.sendWebRtcOffer]: WebRtcSdp & WithReceiver;
+ [WebSocketMessageType.onWebRtcOffer]: WebRtcSdp & WithSender;
+ [WebSocketMessageType.sendWebRtcAnswer]: WebRtcSdp & WithReceiver;
+ [WebSocketMessageType.onWebRtcAnswer]: WebRtcSdp & WithSender;
+ [WebSocketMessageType.sendWebRtcIceCandidate]: WebRtcIceCandidate & WithReceiver;
+ [WebSocketMessageType.onWebRtcIceCandidate]: WebRtcIceCandidate & WithSender;
}
export interface WebSocketMessage<T extends WebSocketMessageType> {