import { Context } from "../context/Context"; import { BaseOperation } from "./base/BaseOperation"; import { EOperationStatus } from "./enum/EOperationStatus"; import { EOperationType } from "./enum/EOperationType"; import { IOperation } from "./interface/IOperation"; import { ActionParams } from "../action/type/ActionParams"; import { ActiveProxyActionParams } from "../action/type/ActiveProxyActionParams"; import { ChangeDeviceActionParams } from "../action/type/ChangeDeviceActionParams"; import { DeviceTypeEnum } from "../context/enum/DeviceTypeEnum"; export class ChangeDeviceOperation extends BaseOperation implements IOperation { constructor(context: Context){ super(context); this.type=EOperationType.CHANGE_DEVICE; } /*@overwrite*/ public async handler(params ? : ActionParams) : Promise{ return new Promise( async (resolve, reject)=>{ try { this.context.getDeterminants().setUpdating(true); let paramsObj : ChangeDeviceActionParams = Object.assign(params ? params : {}); let audioTrack; let videoTrack; switch (paramsObj.type) { case DeviceTypeEnum.Microphone: this.context.getDeterminants().setMicrophoneSelected(paramsObj.device); audioTrack = await this.context.getResources().getAudioTrack(); if(audioTrack){ await audioTrack.setDevice(paramsObj.device.deviceId); this.context.getResources().setAudioTrack(audioTrack); } break; case DeviceTypeEnum.Camera: this.context.getDeterminants().setCameraSelected(paramsObj.device); videoTrack = await this.context.getResources().getVideoTrack(); if(videoTrack){ await videoTrack.setDevice(paramsObj.device.deviceId); this.context.getResources().setVideoTrack(videoTrack); } break; case DeviceTypeEnum.Playback: this.context.getDeterminants().setPlayBackSelected(paramsObj.device); audioTrack = await this.context.getResources().getAudioTrack(); if(audioTrack){ await audioTrack.setPlaybackDevice(paramsObj.device.deviceId); this.context.getResources().setAudioTrack(audioTrack); } break; } this.status = EOperationStatus.PERFORMED; } catch (error) { this.addError(error); this.status = EOperationStatus.FAILED; } resolve(this.status); }); } }