diff --git a/jam-ui/src/components/client/JKSessionScreen.js b/jam-ui/src/components/client/JKSessionScreen.js index 31d11371c..73c5891b7 100644 --- a/jam-ui/src/components/client/JKSessionScreen.js +++ b/jam-ui/src/components/client/JKSessionScreen.js @@ -55,6 +55,7 @@ import { selectBackingTrackData, selectJamTrackData } from '../../store/features/activeSessionSlice'; +import { addMessageFromWebSocket } from '../../store/features/sessionChatSlice'; import { CLIENT_ROLE, RECORD_TYPE_AUDIO, RECORD_TYPE_BOTH } from '../../helpers/globals'; import { MessageType } from '../../helpers/MessageFactory.js'; @@ -538,12 +539,28 @@ const JKSessionScreen = () => { //@refreshCurrentSession(true); + // Chat message handler - receives messages from WebSocket and dispatches to Redux + const handleChatMessage = (data) => { + // Transform Protocol Buffer format to Redux format + const message = { + id: data.msg_id, + senderId: data.sender_id, + senderName: data.sender_name, + message: data.msg, + createdAt: data.created_at, + channel: 'session', + sessionId: currentSession.id + }; + dispatch(addMessageFromWebSocket(message)); + }; + // Register message callbacks and store references for cleanup const callbacksToRegister = [ { type: MessageType.SESSION_JOIN, callback: trackChanges }, { type: MessageType.SESSION_DEPART, callback: trackChanges }, { type: MessageType.TRACKS_CHANGED, callback: trackChanges }, - { type: MessageType.HEARTBEAT_ACK, callback: trackChanges } + { type: MessageType.HEARTBEAT_ACK, callback: trackChanges }, + { type: MessageType.CHAT_MESSAGE, callback: handleChatMessage } ]; callbacksToRegister.forEach(({ type, callback }) => {