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-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> {