Add unbind function to WebSocketContext

Change WebSocketCallbacks to have sets of callbacks instead of arrays.

Change-Id: I48439d0ff9b8188f47e0530d7d91f78c6fae8868
diff --git a/client/src/pages/ChatInterface.tsx b/client/src/pages/ChatInterface.tsx
index 12659e9..f226fec 100644
--- a/client/src/pages/ChatInterface.tsx
+++ b/client/src/pages/ChatInterface.tsx
@@ -16,7 +16,7 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { Box, Divider, Stack } from '@mui/material';
-import { ConversationMember, Message, WebSocketMessageType } from 'jami-web-common';
+import { ConversationMember, ConversationMessage, Message, WebSocketMessageType } from 'jami-web-common';
 import { useCallback, useContext, useEffect, useState } from 'react';
 import { useDropzone } from 'react-dropzone';
 
@@ -88,12 +88,17 @@
 
   useEffect(() => {
     if (webSocket) {
-      webSocket.bind(WebSocketMessageType.ConversationMessage, ({ message }) => {
+      const conversationMessageListener = ({ message }: ConversationMessage) => {
         console.log('newMessage');
         setMessages((messages) => addMessage(messages, message));
-      });
+      };
+
+      webSocket.bind(WebSocketMessageType.ConversationMessage, conversationMessageListener);
+      return () => {
+        webSocket.unbind(WebSocketMessageType.ConversationMessage, conversationMessageListener);
+      };
     }
-  }, [conversationId, webSocket]);
+  }, [webSocket]);
 
   if (isLoading) {
     return <LoadingPage />;