2019-08-21 14:50:00 +00:00
|
|
|
// @flow
|
2018-03-07 15:23:04 +00:00
|
|
|
|
2018-04-17 19:50:23 +00:00
|
|
|
import { MiddlewareRegistry } from '../redux';
|
2018-03-07 15:23:04 +00:00
|
|
|
|
2018-04-17 19:50:23 +00:00
|
|
|
import { CONFERENCE_WILL_JOIN } from '../conference';
|
|
|
|
import { JitsiConferenceEvents } from '../lib-jitsi-meet';
|
2018-03-07 15:23:04 +00:00
|
|
|
import { setConnectionState } from './actions';
|
2019-08-21 14:50:00 +00:00
|
|
|
import logger from './logger';
|
2018-03-07 15:23:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The Redux middleware of the feature testing.
|
|
|
|
*
|
|
|
|
* @param {Store} store - The Redux store.
|
|
|
|
* @returns {Function}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
MiddlewareRegistry.register(store => next => action => {
|
|
|
|
switch (action.type) {
|
|
|
|
case CONFERENCE_WILL_JOIN:
|
|
|
|
_bindConferenceConnectionListener(action.conference, store);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return next(action);
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Binds a handler which will listen for the connection related conference
|
|
|
|
* events (in the lib-jitsi-meet internals those are associated with the ICE
|
|
|
|
* connection state).
|
|
|
|
*
|
|
|
|
* @param {JitsiConference} conference - The {@link JitsiConference} for which
|
|
|
|
* the conference will join even is dispatched.
|
|
|
|
* @param {Store} store - The redux store in which the specified action is being
|
|
|
|
* dispatched.
|
|
|
|
* @private
|
|
|
|
* @returns {void}
|
|
|
|
*/
|
|
|
|
function _bindConferenceConnectionListener(conference, { dispatch }) {
|
|
|
|
|
|
|
|
conference.on(
|
|
|
|
JitsiConferenceEvents.CONNECTION_ESTABLISHED,
|
|
|
|
_onConnectionEvent.bind(
|
|
|
|
null, JitsiConferenceEvents.CONNECTION_ESTABLISHED, dispatch));
|
|
|
|
conference.on(
|
|
|
|
JitsiConferenceEvents.CONNECTION_RESTORED,
|
|
|
|
_onConnectionEvent.bind(
|
|
|
|
null, JitsiConferenceEvents.CONNECTION_RESTORED, dispatch));
|
|
|
|
conference.on(
|
|
|
|
JitsiConferenceEvents.CONNECTION_INTERRUPTED,
|
|
|
|
_onConnectionEvent.bind(
|
|
|
|
null, JitsiConferenceEvents.CONNECTION_INTERRUPTED, dispatch));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The handler function for conference connection events which wil store the
|
|
|
|
* latest even name in the Redux store of feature testing.
|
|
|
|
*
|
|
|
|
* @param {string} event - One of the lib-jitsi-meet JitsiConferenceEvents.
|
|
|
|
* @param {Function} dispatch - The dispatch function of the current Redux
|
|
|
|
* store.
|
|
|
|
* @returns {void}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
function _onConnectionEvent(event, dispatch) {
|
|
|
|
switch (event) {
|
|
|
|
case JitsiConferenceEvents.CONNECTION_ESTABLISHED:
|
|
|
|
case JitsiConferenceEvents.CONNECTION_INTERRUPTED:
|
|
|
|
case JitsiConferenceEvents.CONNECTION_RESTORED:
|
|
|
|
dispatch(setConnectionState(event));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
logger.error(`onConnectionEvent - unsupported event type: ${event}`);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|