fix(05-03): register alert callback to receive backend mixer changes
PROBLEM:
- onBackendMixerChanged never being called
- No [HandleAlertCallback] logs
- Backing track changes not triggering session refresh
ROOT CAUSE:
- Alert callback never registered with native client
- In legacy code: jamClient.SessionSetAlertCallback("JK.AlertCallback")
- React app had no equivalent setup
- Backend mixer change alerts (type=2) never delivered to app
- So onBackendMixerChanged never called, session never refreshed
SOLUTION:
1. Add JK.HandleAlertCallback global function in JKSessionScreen
2. Routes BACKEND_MIXER_CHANGE (type=2) to sessionModel.onBackendMixerChanged
3. Register callback with jamClient.SessionSetAlertCallback on session join
4. Unregister callback on session leave for cleanup
FLOW NOW:
1. User opens backing track via jamClient
2. Native client detects change
3. Native client calls JK.HandleAlertCallback(type=2, 'RebuildMediaControl')
4. Handler routes to sessionModel.onBackendMixerChanged()
5. Syncs tracks and calls refreshCurrentSession()
6. REST API returns session with participants[].backing_tracks
7. updateSessionInfo() extracts and dispatches to Redux
8. mixerHelper.backingTracks populated
9. Component displays backing track
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
e4651ae1cb
commit
a88beb3f4e
|
|
@ -266,6 +266,33 @@ const JKSessionScreen = () => {
|
|||
}
|
||||
}, [sessionIdFromUrl, sessionId, dispatch]);
|
||||
|
||||
// Setup global alert callback handler for backend mixer changes
|
||||
useEffect(() => {
|
||||
if (!window.JK) window.JK = {};
|
||||
|
||||
// Alert callback handler - routes backend alerts to appropriate handlers
|
||||
window.JK.HandleAlertCallback = (type, text) => {
|
||||
console.log('[HandleAlertCallback] Alert received:', { type, text });
|
||||
|
||||
// BACKEND_MIXER_CHANGE = 2
|
||||
if (type === 2) {
|
||||
console.log('[HandleAlertCallback] BACKEND_MIXER_CHANGE detected:', text);
|
||||
if (sessionModel && sessionModel.onBackendMixerChanged) {
|
||||
sessionModel.onBackendMixerChanged(type, text);
|
||||
} else {
|
||||
console.warn('[HandleAlertCallback] sessionModel.onBackendMixerChanged not available');
|
||||
}
|
||||
}
|
||||
// Handle other alert types as needed
|
||||
};
|
||||
|
||||
return () => {
|
||||
if (window.JK) {
|
||||
delete window.JK.HandleAlertCallback;
|
||||
}
|
||||
};
|
||||
}, [sessionModel]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isConnected || !jamClient) return;
|
||||
console.debug("JKSessionScreen: -DEBUG- isConnected changed to true");
|
||||
|
|
@ -357,6 +384,7 @@ const JKSessionScreen = () => {
|
|||
const joinSession = async () => {
|
||||
|
||||
await jamClient.SessionRegisterCallback("JK.HandleBridgeCallback2");
|
||||
await jamClient.SessionSetAlertCallback("JK.HandleAlertCallback");
|
||||
await jamClient.RegisterRecordingCallbacks("JK.HandleRecordingStartResult", "JK.HandleRecordingStopResult", "JK.HandleRecordingStarted", "JK.HandleRecordingStopped", "JK.HandleRecordingAborted");
|
||||
|
||||
await jamClient.SessionSetConnectionStatusRefreshRate(1000);
|
||||
|
|
|
|||
|
|
@ -493,6 +493,7 @@ export default function useSessionModel(app, server, sessionScreen) {
|
|||
// Unregister callbacks
|
||||
try {
|
||||
await jamClient.SessionRegisterCallback("");
|
||||
await jamClient.SessionSetAlertCallback("");
|
||||
await jamClient.SessionSetConnectionStatusRefreshRate(0);
|
||||
logger.debug("Callbacks unregistered successfully");
|
||||
} catch (error) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue