change videoConf saga to TS
This commit is contained in:
parent
60defec633
commit
1d144cf19c
|
@ -84,5 +84,10 @@ export const ENCRYPTION = createRequestTypes('ENCRYPTION', ['INIT', 'STOP', 'DEC
|
||||||
|
|
||||||
export const PERMISSIONS = createRequestTypes('PERMISSIONS', ['SET', 'UPDATE']);
|
export const PERMISSIONS = createRequestTypes('PERMISSIONS', ['SET', 'UPDATE']);
|
||||||
export const ROLES = createRequestTypes('ROLES', ['SET', 'UPDATE', 'REMOVE']);
|
export const ROLES = createRequestTypes('ROLES', ['SET', 'UPDATE', 'REMOVE']);
|
||||||
export const VIDEO_CONF = createRequestTypes('VIDEO_CONF', ['HANDLE_INCOMING_WEBSOCKET_MESSAGES']);
|
export const VIDEO_CONF = createRequestTypes('VIDEO_CONF', [
|
||||||
|
'HANDLE_INCOMING_WEBSOCKET_MESSAGES',
|
||||||
|
'SET',
|
||||||
|
'REMOVE',
|
||||||
|
'CLEAR',
|
||||||
|
'INIT_CALL'
|
||||||
|
]);
|
||||||
|
|
|
@ -1,16 +1,50 @@
|
||||||
import { Action } from 'redux';
|
import { Action } from 'redux';
|
||||||
|
|
||||||
|
import { ICallInfo } from '../reducers/videoConf';
|
||||||
import { VIDEO_CONF } from './actionsTypes';
|
import { VIDEO_CONF } from './actionsTypes';
|
||||||
|
|
||||||
export interface IVideoConfGenericAction extends Action {
|
interface IHandleVideoConfIncomingWebsocketMessages extends Action {
|
||||||
data: any;
|
data: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TActionUserTyping = IVideoConfGenericAction & Action;
|
export type TCallProps = { mic: boolean; cam: boolean; direct: boolean; roomId: string };
|
||||||
|
|
||||||
export function handleVideoConfIncomingWebsocketMessages(data: any): IVideoConfGenericAction {
|
export interface IVideoConfGenericAction extends Action {
|
||||||
|
payload: ICallInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TActionVideoConf = IHandleVideoConfIncomingWebsocketMessages & IVideoConfGenericAction & Action;
|
||||||
|
|
||||||
|
export function handleVideoConfIncomingWebsocketMessages(data: any): IHandleVideoConfIncomingWebsocketMessages {
|
||||||
return {
|
return {
|
||||||
type: VIDEO_CONF.HANDLE_INCOMING_WEBSOCKET_MESSAGES,
|
type: VIDEO_CONF.HANDLE_INCOMING_WEBSOCKET_MESSAGES,
|
||||||
data
|
data
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setVideoConfCall(payload: ICallInfo): IVideoConfGenericAction {
|
||||||
|
return {
|
||||||
|
type: VIDEO_CONF.SET,
|
||||||
|
payload
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function removeVideoConfCall(payload: ICallInfo): IVideoConfGenericAction {
|
||||||
|
return {
|
||||||
|
type: VIDEO_CONF.REMOVE,
|
||||||
|
payload
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clearVideoConfCalls(): Action {
|
||||||
|
return {
|
||||||
|
type: VIDEO_CONF.CLEAR
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function initVideoCall(payload: TCallProps): Action & { payload: TCallProps } {
|
||||||
|
return {
|
||||||
|
type: VIDEO_CONF.INIT_CALL,
|
||||||
|
payload
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
import { TypedUseSelectorHook, useSelector } from 'react-redux';
|
import { TypedUseSelectorHook, useSelector } from 'react-redux';
|
||||||
|
import { select } from 'redux-saga/effects';
|
||||||
|
|
||||||
import { IApplicationState } from '../../definitions';
|
import { IApplicationState } from '../../definitions';
|
||||||
|
|
||||||
export const useAppSelector: TypedUseSelectorHook<IApplicationState> = useSelector;
|
export const useAppSelector: TypedUseSelectorHook<IApplicationState> = useSelector;
|
||||||
|
|
||||||
|
export function* appSelector<TSelected>(selector: (state: IApplicationState) => TSelected): Generator<any, TSelected, TSelected> {
|
||||||
|
return yield select(selector);
|
||||||
|
}
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
import { takeLatest } from 'redux-saga/effects';
|
|
||||||
|
|
||||||
import { VIDEO_CONF } from '../actions/actionsTypes';
|
|
||||||
|
|
||||||
const handleVideoConfIncomingWebsocketMessages = function* handleVideoConfIncomingWebsocketMessages({ data }) {
|
|
||||||
const { action, params } = data.action;
|
|
||||||
|
|
||||||
if (!action || typeof action !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!params || typeof params !== 'object' || !params.callId || !params.uid || !params.rid) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(action, params);
|
|
||||||
// switch (action) {
|
|
||||||
// case 'call':
|
|
||||||
// return this.onDirectCall(params);
|
|
||||||
// case 'canceled':
|
|
||||||
// return this.onDirectCallCanceled(params);
|
|
||||||
// case 'accepted':
|
|
||||||
// return this.onDirectCallAccepted(params);
|
|
||||||
// case 'rejected':
|
|
||||||
// return this.onDirectCallRejected(params);
|
|
||||||
// case 'confirmed':
|
|
||||||
// return this.onDirectCallConfirmed(params);
|
|
||||||
// case 'join':
|
|
||||||
// return this.onDirectCallJoined(params);
|
|
||||||
// case 'end':
|
|
||||||
// return this.onDirectCallEnded(params);
|
|
||||||
// }
|
|
||||||
};
|
|
||||||
|
|
||||||
const root = function* root() {
|
|
||||||
yield takeLatest(VIDEO_CONF.HANDLE_INCOMING_WEBSOCKET_MESSAGES, handleVideoConfIncomingWebsocketMessages);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default root;
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
import { Action } from 'redux';
|
||||||
|
import { call, takeLatest } from 'typed-redux-saga';
|
||||||
|
|
||||||
|
import { VIDEO_CONF } from '../actions/actionsTypes';
|
||||||
|
import { IVideoConfGenericAction, TCallProps } from '../actions/videoConf';
|
||||||
|
import i18n from '../i18n';
|
||||||
|
import { getSubscriptionByRoomId } from '../lib/database/services/Subscription';
|
||||||
|
import { appSelector } from '../lib/hooks';
|
||||||
|
import { callJitsi } from '../lib/methods';
|
||||||
|
import { compareServerVersion, showErrorAlert } from '../lib/methods/helpers';
|
||||||
|
import log from '../lib/methods/helpers/log';
|
||||||
|
import { videoConfJoin } from '../lib/methods/videoConf';
|
||||||
|
import { Services } from '../lib/services';
|
||||||
|
import { ICallInfo } from '../reducers/videoConf';
|
||||||
|
|
||||||
|
type TGenerator = Generator<IVideoConfGenericAction>;
|
||||||
|
|
||||||
|
function* onDirectCall(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallCanceled(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallAccepted(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallRejected(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallConfirmed(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallJoined(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* onDirectCallEnded(payload: ICallInfo): TGenerator {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function* handleVideoConfIncomingWebsocketMessages({ data }: { data: any }) {
|
||||||
|
const { action, params } = data.action;
|
||||||
|
|
||||||
|
if (!action || typeof action !== 'string') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!params || typeof params !== 'object' || !params.callId || !params.uid || !params.rid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const prop = { ...params, action };
|
||||||
|
switch (action) {
|
||||||
|
case 'call':
|
||||||
|
yield call(onDirectCall, prop);
|
||||||
|
break;
|
||||||
|
case 'canceled':
|
||||||
|
yield call(onDirectCallCanceled, prop);
|
||||||
|
break;
|
||||||
|
case 'accepted':
|
||||||
|
yield call(onDirectCallAccepted, prop);
|
||||||
|
break;
|
||||||
|
case 'rejected':
|
||||||
|
yield call(onDirectCallRejected, prop);
|
||||||
|
break;
|
||||||
|
case 'confirmed':
|
||||||
|
yield call(onDirectCallConfirmed, prop);
|
||||||
|
break;
|
||||||
|
case 'join':
|
||||||
|
yield call(onDirectCallJoined, prop);
|
||||||
|
break;
|
||||||
|
case 'end':
|
||||||
|
yield call(onDirectCallEnded, prop);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function* initCall({ payload: { mic, cam, direct, roomId } }: { payload: TCallProps }) {
|
||||||
|
const serverVersion = yield* appSelector(state => state.server.version);
|
||||||
|
const isServer5OrNewer = compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0');
|
||||||
|
if (isServer5OrNewer) {
|
||||||
|
try {
|
||||||
|
const videoConfResponse = yield* call(Services.videoConferenceStart, roomId);
|
||||||
|
if (videoConfResponse.success) {
|
||||||
|
if (direct) {
|
||||||
|
// callUser({ uid: data.calleeId, rid: roomId, callId: data.callId });
|
||||||
|
} else {
|
||||||
|
videoConfJoin(videoConfResponse.data.callId, cam, mic);
|
||||||
|
}
|
||||||
|
// setCalling(false);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// setCalling(false);
|
||||||
|
showErrorAlert(i18n.t('error-init-video-conf'));
|
||||||
|
log(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const sub = yield* call(getSubscriptionByRoomId, roomId);
|
||||||
|
if (sub) {
|
||||||
|
callJitsi({ room: sub, cam });
|
||||||
|
// setCalling(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IGenericAction extends Action {
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function* root(): Generator {
|
||||||
|
yield takeLatest<
|
||||||
|
IGenericAction & {
|
||||||
|
data: any;
|
||||||
|
}
|
||||||
|
>(VIDEO_CONF.HANDLE_INCOMING_WEBSOCKET_MESSAGES, handleVideoConfIncomingWebsocketMessages);
|
||||||
|
yield takeLatest<IGenericAction & { payload: TCallProps }>(VIDEO_CONF.INIT_CALL, initCall);
|
||||||
|
}
|
Loading…
Reference in New Issue